如何在WPF应用程序中使用ole32.dll的游标?
我想使用"光标"类未包含的Windows内置光标之一.我找到了这个问题答案似乎提供了我需要的信息,但有一个问题. System.Windows.Input.Cursor没有接受IntPtr的构造函数.这是该答案提供的代码段(评论是我的): [DllImport("kernel32.dll")] public static extern IntPtr LoadLibrary(string dllToLoad); [DllImport("user32.dll")] public static extern IntPtr LoadCursor(IntPtr hInstance, UInt16 lpCursorName); private void button1_Click(object sender, EventArgs e) { var l = LoadLibrary("ole32.dll"); var h = LoadCursor(l, 6); this
2 2024-04-25
编程技术问答社区
在不重写代码的情况下在外部别名之间进行切换?
extern alias dll1; extern alias dll2; ... public void DoStuff1(){ dll1::NameSpace.Class.Method(); } public void DoStuff2(){ dll2::NameSpace.Class.Method(); } 我想做的是: public void DoStuff(alias a){ a::NameSpace.Class.Method(); } 别名似乎不可用. 附录:dll1和dll2是同一dll的不同版本. 解决方案 我最终使用了.NET 4.0中的动态. 使用外部别名与动态的组合是解决此问题的最干净,最简单的解决方案. 其他解决方案 将代码保留在不同文件中的不同别名中,并在每个文件中使用部分类. (部分类允许您在不同文件中为同一类编写代码.)应该这样做. 例如: 文件1: extern
12 2024-04-22
编程技术问答社区
如何为System.Core创建一个外部别名?
我在项目中绝对需要System.Core的外部别名.不幸的是,在.NET 4.0项目中,您甚至无法将引用添加到System.Core中,因为显然,构建系统默认情况下包含它.有人知道如何胁迫系统让我为此Lib指定外部别名吗?谢谢! 解决方案 这个问题是旧的,但我遇到了同样的问题.据我了解,这是由于视觉工作室暗中添加了对系统的参考. 您可以通过编辑CSPROJ MSBUILD文件并添加: 来覆盖此问题. 最后. 这将禁用我认为Visual Studio已使用/P [Roperty]开关传递给MSBUILD的任何AdditionalExplicitAssemblyReferences. 当然,我们现在仍然必须添加系统.核心参考已不再引用.通过添加 来做到这一点
14 2024-04-20
编程技术问答社区
如何设置一个C++函数以便它能被p/invoke使用?
希望这是一个简单的问题,但它表明我缺乏C ++的专业知识.我是C#程序员,过去我已经与其他人的C ++/C DLL一起做了大量工作.但是,这次我决定自己写一个包装纸C ++ DLL(未经管理),然后从C#打电话给我的包装器DLL. 我立即遇到的问题是我无法定义可以通过p/invoke找到的C ++函数.我不知道这是什么语法,但这是我到目前为止尝试的: extern bool __cdecl TestFunc() { return true; } 最初我只是有这个,但它也没有起作用: bool TestFunc() { return true; } 然后在C#侧,我有: public const string InterfaceLibrary = @"Plugins\TestDLL.dll"; [DllImport( InterfaceLibrary, CallingConvention = CallingConvention.Cd
12 2024-04-15
编程技术问答社区
C++/CLI->C#错误C2526:C链接函数不能返回C++类
我有一个使用VS2010 C#构建的简单.NET DLL,该c#揭示了两个类的静态成员 public class Polygon { public static void Test(int test) {} public static void Test(List test) {} } i然后从VS2010 C ++创建了一个控制台应用,并在_tmain上方添加了此功能 extern "C" void TestMe() { Polygon::Test(3); } 添加参考和编译给我这个错误 1>WierdError.cpp(9): error C2526: 'System::Collections::Generic::List::GetEnumerator' : C linkage function cannot return C++ class 'System::Collections::Generic::List
16 2024-04-15
编程技术问答社区
"无法在dll中找到名为[函数]的入口点"(c++到c#类型转换)。
我有一个来自第三方的DLL,该dll是用C ++编写的. 这是来自DLL文档的一些信息: //start documentation RECO_DATA{ wchar_t Surname[200]; wchar_t Firstname[200]; } 描述: 接收功能结果的数据结构.所有功能结果将是 存储为Unicode(UTF-8). 方法: bool recoCHN_P_Name(char *imgPath,RECO_DATA *o_data); 输入: char * imgPath 图像位置的完整路径 识别 的功能 RECO_DATA * o_data 接收功能的数据对象 结果. 功能返回: 如果成功,则为fals会返回. //end documentation 我试图从我的C#应用​​程序调用recochn_p_name.为此,我提出了此代码: 导入DLL的代码: public class cnOCRsd
16 2024-04-13
编程技术问答社区
C#: shlwapi.dll中StrCmpLogicalW的实现或替代方案
对于我的应用程序中的自然分类,我当前在shlwapi.dll中调用称为strcmplogicalw的函数.我当时正在考虑尝试在单声道下运行我的申请,但是当然,我不能有这个p/undoke的东西(据我所知). 是否可以在某个地方看到该方法的实现,还是有一个良好,干净,有效的C#代码代码? 我的代码当前看起来像这样: [SuppressUnmanagedCodeSecurity] internal static class SafeNativeMethods { [DllImport("shlwapi.dll", CharSet = CharSet.Unicode)] public static extern int StrCmpLogicalW(string psz1, string psz2); } public class NaturalStringComparer : IComparer { private readonly
12 2024-04-11
编程技术问答社区
在C#中,extern是如何工作的?
每当我足够深入地看待反射器时,我就会碰到没有来源的extern方法.我在 http://sdn上阅读了MSDN文档. microsoft.com/en-us/library/e59b22c5(v=vs.80).aspx .我从那篇文章中得到的是,必须注入使用extern修饰符的方法.我将其解释为意味着它类似于抽象的工厂模式.我还注意到我从未见过一种非静态外部方法.静态声明是一项要求(我可以看到这是有意义的)吗?我仍然在这里猜测,我不确定它是如何工作的.在我看来,编译器必须识别一些减轻处理的属性,但是我不知道这些属性是什么属性,除了我从MSDN示例中遇到的属性之外的属性.有人如何利用extern属性?它说,在许多情况下,这可以提高性能.另外,我将如何研究extern Object.InternalGetEquals()之类的方法? 解决方案 考虑读取C#规范的第10.6.7节,它回答了您的许多问题.为了您的方便,我在这里重现了其中的一部分: 当方法声明包括一个 外部修饰符,说
12 2024-04-11
编程技术问答社区
我真的需要访问器函数来访问另一个文件中的全局变量吗?
在我的代码(游戏引擎代码)中,有多个源(.c)文件,这些文件维护游戏的状态,状态如 START CONFIGURE STOP END DEFAULT RUNNING 用于维护状态,使用extern关键字在多个源文件之间共享的一个全局变量gameStatus.现在我已经读到,全局变量使用不良,它允许外部模块更改它,并且随着使用全局变量的组件数量增加,交互的复杂性也可以增加. 因此,我使用static关键字的范围限制了该变量,并在同一文件中添加了get or set APIs(例如get or set APIs).因此,其他文件仅使用登录API访问该变量. 我删除了很好的全局变量,但是现在所有其他使用该全局变量的文件都必须调用访问者API,这似乎添加了函数调用的开销, 所以现在我很困惑哪个更好?关于如何有效共享不同源文件之间数据的任何C标准? 解决方案 全球变量是"不良实践"的事实完全是基于意见的,而100%取决于上下文.不可能说您是否在不查看代码的情况下
6 2024-04-10
编程技术问答社区
C内联函数产生未定义的符号错误
我已经阅读了有关此链接的多个搜索结果,但我仍然不明白: https://gcc.gnu.org/gcc/gcc-5/porting_to.html 为什么此简单代码生成链接器错误: #include inline int add(int a , int b){ return a+b; } int main(){ printf("%d\n", add(1,2)); return 0; } 我想要编译器内联add的所有内容.没有其他翻译单元,这是唯一的翻译单元.为什么会给我一个Undefined symbol链接器错误? 当我们使用它时,我不断阅读inline add()和extern inline add()之间的区别.我以为C中的所有功能都是extern默认情况下? 错误: $clang 0.c Undefined symbols for architecture x86_64: "_add", referenced f
8 2024-04-09
编程技术问答社区
为什么C语言中的函数定义是隐性的外部定义?
我读到extern关键字是函数上下文中隐含的,因此,除非您使用static>关键字另有说明(我没记错的话,这基本上是与static使用的变量 - 它们只能共享一个关键字),所有对象文件都可以看到它们.这是有道理的;在声明与定义相同的文件中时,在技术上不必要,在技术上不必要,因为程序员不必每次都想从其定义文件中使用函数,这种情况常常是这种情况.对我来说似乎很奇怪的是,这是对声明和定义. 的隐含 使用变量,我不需要为定义包括一个extern,实际上,尽管我可以无错误地执行此操作,但我的编译器给了我警告. 例如,我可以拥有mylib.h: int var = 5; //it isn't necessary to write this as //extern int var = 5; //my compiler even warns against it 和test.c #include "mylib.h" extern int var; 我通常会假定函数相同的
4 2024-04-09
编程技术问答社区
我们如何在两个不同的内核模块之间共享一个哈希表?
是否可以在另一个内核模块中的一个内核模块中共享一个hash_table. /*Hash table declarartion and definition*/ DEFINE_HASHTABLE(my_hash_table, HASH_TABLE_BITS); 我正在一个模块中填充这张表,但是我也想在另一个模块中访问此表. 在这里进行外部声明工作. extern DEFINE_HASHTABLE(...,...) 解决方案 DEFINE_HASHTABLE是变量的定义.对于声明变量(不定义它)使用DECLARE_HASHTABLE: extern DECLARE_HASHTABLE(my_hash_table, HASH_TABLE_BITS); 请注意,在Linux内核中,您需要其他步骤来使一个模块中定义的变量在另一个模块中可用. 首先,您需要从模块中导出符号,该模块定义了变量: EXPORT_SYMBOL(my_hash_table);
4 2024-04-09
编程技术问答社区
符号多重定义的可能原因,而不是'extern'。
除了没有在.h中声明,将其作为" extern",并且在.cpp中实现了"符号乘以乘以". 我很确定我的所有文件都遵循规则,但是我收到了这样的错误消息: ld: lto: could not merge in /Users/zlw/Library/Developer/Xcode/DerivedData/Wireless - amjmgyrircjezdhegioctszbcypz/Build/Intermediates/Wireless.build/Debug/Wireless.build/Objects normal/x86_64/qam.o because 'Linking globals named '_Z12SNRFromSNRdBd': symbol multiply defined!', using libLTO version 'LLVM version 3.3svn, from Apple Clang 5.0 (build 500.2.76)' fo
12 2024-04-09
编程技术问答社区
从C++来源的C-DLL
我有一个用于我的C ++框架的C-Wrapper.由于这应该在Mac和Windows上运行,所以我使用 SCONS : env = Environment() env.Append(CPPPATH = ['./']) env.Append(LIBS = 'kernel32.lib') env.Append(LIBPATH = 'C:/Program Files/Microsoft SDKs/Windows/v6.0A/Lib') env.SharedLibrary(target='warpLib', source='warplib.cpp') warplib.cpp和warplib.h的简单版本看起来像: warplib.cpp #define DllExport __declspec( dllexport ) #include "warplib.h" extern "C" { DllExport int foo(int a) { return a;
4 2024-04-09
编程技术问答社区
在Visual Studio中使用threadprivate指令
看来,Visual Studio 2010中的OpenMP实现具有严重的错误,不允许将外部变量作为线程驱动器.以下代码不会编译: file.c #include /* Declaration of external variable. */ extern int My_Var; #pragma omp threadprivate (My_Var) void MyFunc(void) { My_Var = 1;} 错误消息是: error C3053: 'My_Var' : 'threadprivate' is only valid for global or static data tems. 显然,编译器对变量的链接属性感到困惑. 最常见的是在多个文件中引用全局变量.因此,此问题使threadprivate在任何现实程序中都无法使用. 我想知道是否有技巧可以处理此错误.不幸的是,在我的情况下,这个问题阻止了我完全使用OMP
6 2024-04-09
编程技术问答社区
C语言中extern的行为
如果我在file1.c 中声明int Array[10]; 在file2.c中,如果我有这样的函数 extern int *Array; fun() { Array[0]=10; } 这个问题是否有问题? 解决方案 是的. 您将Array声明为指针,而是 array .这两个是非常不同的对象,在这里,您基本上向编译器提供了虚假信息. 请注意,在两种情况下,要访问元素的C语法都是Array[0],但是如果Array是指针变量,则所需的机器代码将与if Array相反,而不是一个数组是一个额外的间接). 例如,如果将Array1声明为extern int *Array Array1由GCC生成的机器代码为: movslq ix(%rip), %rax ;; Load index value from location ix movq Array1(%rip), %rdx ;; Load pointer val
8 2024-04-09
编程技术问答社区
与extern关键字的使用有关的疑虑
afaik,应将外部关键字用于声明,并且没有值与用外部关键字声明的变量相关联.但是假设我写了一个 之类的语句 extern int i = 10; 编译器是否应该同时标记错误?我已经看到一些编译器宽容而忽略了吗?为什么这样? " C"标准对此有何评价? 编辑: @all,感谢您的答案.我仍然怀疑.假设我有此变量的定义,而没有另一个文件中的外部链接表示A.C,并且我在卑诗省添加了此语句.编译器不标记错误仍然可以吗?它在重新定义下吗? 解决方案 这是有效的语法,在C99标准中甚至存在一个本质上相同的示例. (请参阅第6.9.2-4节.) 的确,这些示例不是规范性的,但我认为这是为了是合法语法.编译器通常会输出警告,因为它并没有真正完成任何操作. 4示例1 int i1 = 1; // definition, external linkage static int i2 = 2; // definition, inter
8 2024-04-09
编程技术问答社区
为什么在一个函数中,全局静态变量优先于外部变量?
这很难在文本中解释,所以我将举一个例子. //f1.c int a = 5; int main() { printf("func2() output is: %i\n", func2() ); return 0; } //f2.c static int a = 3 int func2() { extern int a; return a; } 当我编译并运行此操作时,我会得到3,而我期待5.有人可以向我解释为什么我得到3个?我以为通过在功能中使用外部,它不会使用静态变量的值. 解决方案 来自N1256§6.2.2¶4: 对于用存储类规范符声明的标识符,在该范围内可见该标识符的先前声明,如果先前的声明指定了内部或外部链接,则在后来的声明为内部或外部链接,则标识符的链接是与先前声明中指定的链接相同.如果没有可见事先声明,或者先前的声明没有指定链接,则标识符具有外部链接. so,extern在函数范围内,该变量具有默认值的外
4 2024-04-09
编程技术问答社区
为什么包括有外部变量和函数的h文件会导致未定义的引用?
如果我希望这些外部在运行时与dlopen一起解决? 我试图理解为什么包含一个带有共享库外部var和funcs的h文件,可执行可执行程序导致未定义/未解决的情况. (链接时) ,如果我只希望在运行时解决这些符号,为什么我必须将" -lsomelib"标志添加到GCC链接中. 链接时间链接器需要这些删除分辨率的方法.为什么不能在使用dlopen时等待运行时的分辨率. 谁能帮助我理解这一点? 解决方案 这里可能有助于理解的东西: 链接有3种类型: 静态链接(.A):编译器在链接时间将库的内容包括在您的代码中,以便您可以将代码移至具有相同体系结构的其他计算机并运行它. 动态链接(.SO):编译器在链接时间(编译期间)解决符号;但是,这些并不包括可执行文件中的库代码.启动程序后,库会加载.如果找不到图书馆,则程序停止.您需要运行程序的计算机上的库 动态加载:您负责在运行时加载库功能,使用dlopen等.专门用于插件 另请参见:共享对象(.so)之间的
8 2024-04-09
编程技术问答社区
C,硬件抽象层中的 "外置 "类型的变量
我在硬件抽象层上工作.此HAL的目的是轻松在Linux驱动程序和MCU驱动程序之间切换. 我正在使用SPI接口.下面是"打开" SPI的界面的HAL功能的签名. hal/spi.h spi_handle_t spi_open(spi_port_t channel, spi_config_t config); spi_port_t: 在Linux上,这是一种基本类型:uint32_t 在MCU上,它是一个结构. spi_config_t: 在Linux和MCU上,它是一个结构,但具有不同的字段. so so mcu/spi.c 我在某个时候有: typedef spiBASE_t spi_channel_t; typedef spiDAT1_t spi_config_t; spi_handle_t spi_open(spi_channel_t channel, spi_config_t config) { . . . } 和 l
8 2024-04-09
编程技术问答社区