草庐IT

dllexport

全部标签

c# - 在C#中调用c dll

问题介绍:我必须通过DLL文件、LIB文件和函数声明为dllimport的c头文件提供的API来控制某个设备。当我在C++项目中使用API时,一切正常-我包含了header、lib、dll,并调用了header文件中声明的函数。当尝试使用[DllImport]属性从C#.NET项目调用这些函数时,问题就开始了:函数是用准确的名称和参数声明的,并且运行代码没有抛出任何异常。然而设备根本没有响应,就像这些功能从未真正被调用过一样。在C头文件中是如何声明的:int__declspec(dllimport)Init_Card_RTx(unsignedshortdevice_num,unsign

c++ - 内联类函数和共享库 (dll) 构建

我正在尝试将一些代码移动到共享库中(在独立编译时工作正常)但遇到了类内联函数的一些问题。mingw/gccv4.7.2.部分问题似乎是因为我更喜欢在类声明之外定义我的内联函数(它使类声明更整洁且更易于阅读)。我一直认为这是可以接受的,相当于在类声明中定义……但情况似乎并非总是如此。我创建了一个简单示例来演示这些问题。(显然,dllexport通常在宏中以在导入/导出之间切换。)标题://Uncommentoneatatimetoseehowitcompileswith:-O2-Winline//#defineINLINE_OPTION1//implicit-buildswithouti

c++ - 哪个模块调用了我的 DLL 导出函数?

背景我正在开发一个导出单个函数的C++WindowsDLL模块__declspec(dllexport)voidRun()动机我想对我的函数实现某种访问权限。我希望防止未经授权的模块激活我的DLL过程。我不需要强大/防弹机制。我只喜欢“保护”这个过程不受在我自己的应用程序下运行的其他模块的影响。方法获取调用模块名称,根据名称决定是否允许访问。问题这种方法是否足够?如果是这样,我如何获得调用模块的名称? 最佳答案 ifso,howdoIgetthenameofthecallingmodule?通过电话获取回邮地址_ReturnAddr

windows - 构建 64 位 dll 时的警告

dll导出头文件extern"C"void_declspec(dllexport)__stdcallfoo();.def文件EXPORTSfoo@1当我通过64位构建配置构建dll时,我遇到了这个警告。warningLNK4197:export'foo'specifiedmultipletimes;usingfirstspecification但如果我通过32位构建配置构建dll,则永远不会出现警告。问题是什么?有什么区别。在接口(interface)的dll头中,我们通常使用这种技术,#ifdefEXPORT_DLL#defineBASICAPI_declspec(dllexport

c - 在 linux 中获取导出函数的名称和地址

通过使用PIMAGE_DOS_HEADER,我可以从Windows中的可执行文件中获取导出的函数名称和指针列表。API(example)。Linux的等效API是什么?对于上下文,我正在创建单元测试可执行文件,并且我正在导出以名称“test_”开头的函数,我希望可执行文件在运行时旋转并执行所有测试函数。示例伪代码:intmain(intargc,char**argv){autorun=new_trun();automodule=dlopen(NULL);autoexports=get_exports(module);//length;i++){autoexport=exports[i]

c - 在 linux 中获取导出函数的名称和地址

通过使用PIMAGE_DOS_HEADER,我可以从Windows中的可执行文件中获取导出的函数名称和指针列表。API(example)。Linux的等效API是什么?对于上下文,我正在创建单元测试可执行文件,并且我正在导出以名称“test_”开头的函数,我希望可执行文件在运行时旋转并执行所有测试函数。示例伪代码:intmain(intargc,char**argv){autorun=new_trun();automodule=dlopen(NULL);autoexports=get_exports(module);//length;i++){autoexport=exports[i]

c++ - __declspec(dllimport) 如何加载库

http://msdn.microsoft.com/en-us/library/9h658af8.aspxMSDN说我可以使用__declspec(dllexport)从库中导出函数,但是如何将这个库加载到我的可执行文件中?我在DLL中有一个导出函数:__declspec(dllexport)voidmyfunc(){}现在我想在我的可执行文件中使用它:__declspec(dllimport)voidmyfunc(void);但是我的程序如何知道在哪里可以找到这个函数呢? 最佳答案 这是编译器/链接器的工作,只要你自动完成在链接器

c++ - __declspec(dllimport) 如何加载库

http://msdn.microsoft.com/en-us/library/9h658af8.aspxMSDN说我可以使用__declspec(dllexport)从库中导出函数,但是如何将这个库加载到我的可执行文件中?我在DLL中有一个导出函数:__declspec(dllexport)voidmyfunc(){}现在我想在我的可执行文件中使用它:__declspec(dllimport)voidmyfunc(void);但是我的程序如何知道在哪里可以找到这个函数呢? 最佳答案 这是编译器/链接器的工作,只要你自动完成在链接器

c++ - 使用 extern c 和 dllexport 与模块定义 (msvc++) 进行标准调用名称修改

我试图为dll导出一个简单的测试函数,以便与指定调用约定为的应用程序(仅供引用:mIRC)一起使用:int__stdcalltest_func(HWNDmWnd,HWNDaWnd,char*data,char*parms,BOOLshow,BOOLnopause)现在,要从应用程序中调用它,我会使用test_func,但我注意到由于名称修改,它并不像我想象的那么简单。通过此处的类似主题,我了解到将extern"C"与__declspec(dllexport)结合使用是一种等效的(某种程度上)消除重整的方法到模块定义(.def)。但是,当使用extern/dllexport方法时,我的函

c++ - 使用 extern c 和 dllexport 与模块定义 (msvc++) 进行标准调用名称修改

我试图为dll导出一个简单的测试函数,以便与指定调用约定为的应用程序(仅供引用:mIRC)一起使用:int__stdcalltest_func(HWNDmWnd,HWNDaWnd,char*data,char*parms,BOOLshow,BOOLnopause)现在,要从应用程序中调用它,我会使用test_func,但我注意到由于名称修改,它并不像我想象的那么简单。通过此处的类似主题,我了解到将extern"C"与__declspec(dllexport)结合使用是一种等效的(某种程度上)消除重整的方法到模块定义(.def)。但是,当使用extern/dllexport方法时,我的函