如何调用C DLL函数c++ /CLI
How to call C DLL functions C++/CLI
我已经查看了很多在线搜索,大多数都有谈论c#与C或c++与c#的例子,但从未遇到过使用c++调用C DLL(特别是在我的情况下从c++/CLI与WPF)。
有人可以用一个例子来解释如何在c++中调用C DLL函数。我有一个C DLL,它的所有函数都定义为extern"C"funcName(),还有一个导出函数。def文件,其中包含所有需要导出的函数名称。现在有了这个C DLL,我如何在c++代码中调用它的导出函数。
谢谢。
好的,所以"WPF with c++ "不是一门语言。WPF是一个。net库。c++/CLI是你正在使用的语言。
从c++/CLI调用C DLL"相当容易",这取决于DLL是如何导出的。你可以使用。net库或C库(我建议使用C库)来做到这一点。链接到dll有两种方式:隐式链接或显式链接。
隐式链接要干净得多。但是您需要访问一个头文件(Edit: 可能是带有declspec修饰,参见下面BenVoigt的注释)和一个.lib文件。如果您有这些,只需将.lib文件添加到Additional Dependencies(右键单击project->properties->Configuration properties-> Linker->Input),并将头文件路径添加到include(右键单击project->properties->Configuration properties->C/c++ ->General)。然后,您可以将头文件(props to metacubed for mention this)包含为外部"C"头文件:
extern "C"
{
#inlude "c_header.h"
}
(这是因为c++做了名称混淆,这样你就可以重载&名称空间,课程之类的。如果你不使用extern "C"
或者你可以显式链接
http://msdn.microsoft.com/en-us/library/784bt7z7.aspxhttp://msdn.microsoft.com/en-us/library/zzk20sxw.aspx
但我怀疑,弄清楚你正在使用c++/CLI,它会告诉你该谷歌什么。(虽然c++的答案也适用于你)。
对于。net方式,一个简单的技巧是查找c#调用(请注意,这也是显式链接,因此不需要。lib文件和头文件)。 http://msdn.microsoft.com/en-us/library/eyzhw3s8.aspx现在棘手的一点是,如果您正在使用c++/CLI,并希望将您的花哨的托管类转换为C形式,则必须对封送代码。
http://msdn.microsoft.com/en-us/library/ac7ay120%28vs.71%29.aspx从c++ dll调用C dll函数是完全相同的,无论是WPF, c++/CLI还是本机c++。
- 包含头文件语法见下文。
- 将
.lib
作为导入依赖项添加到项目中。还要将链接器设置为使用DLL。查看隐式链接了解所有细节。 - 确保当程序执行时,使用的DLL存在于运行时类路径中。
- 使用头文件中定义的函数
头文件include应该声明为:
extern "C" {
#include "c_header.h"
}
就是这样!
编辑:另外,看看这个:从c++代码调用C函数
- 使用c#访问c++dll中带有char*参数的函数时发生AccessViolationException
- Visual c ++,使用字符串引用/指针调用 dll 函数
- 来自 DLL 的函数调用 [表观调用的括号前面的表达式必须具有(指向-)函数类型]
- C++ DLL 引用C++.exe中的函数和类
- 如何使用导出的函数交叉编译 DLL
- 如何在窗口中使用注入的 dll 中的参数调用函数
- 在 Microsoft Access SQL 中调用自定义 DLL 函数时传递的内存地址无效
- 加载由 MATLAB Coder 生成的带有函数的 DLL,该函数调用外部函数
- PowerShell 使用结构类型参数调用 C++ DLL 的导出函数
- 从DLL导出函数,LoadLibrary()需要用TEXT转换的字符串才能编译而不会出错
- 从 C#-DLL 调用函数的 C++ 失败
- 如何在 DLL 内的成员函数中使用互斥/关键节
- 调用 "project" 函数和调用 DLL 函数之间的区别
- 函数指针分配在创建 DLL 后导致错误
- 从动态加载的 dll 内部调用C++函数
- 函数声明中的 WINAPI 标识符C++ DLL 入口点函数中的标识符
- LNK2019某些类函数,但不在其他类函数(DLL 中的模板类)上
- 从库导入函数./ DLL 文件
- 从 ntdll 调用 Nt 函数.dll在 Win32 环境中,C++
- 如何使用ctypes将python列表传递给C函数(dll)