c++调用c语言写的dll

话不多说,直奔主题。首先创建一个空项目,然后创建相应的头文件和源文件。

C语言部分

头文件如下

#pragma once
//这里是为了c++调用避免出现链接错误
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus

	__declspec(dllimport) void myFunc(int paramA, int paramB);

#ifdef __cplusplus
}
#endif // __cplusplus

源文件直接实现函数即可。

生成之前将属性-常规-项目默认值-配置类型修改为动态库。若要修改栈的大小,修改链接器-系统-堆栈保留大小或者提交大小。如修改为10MB,则为1048576。以此类推。

然后点生成即可。

-------------------------------------------------------------分割线-----------------------------------------------------------------

c++调用:

先将上面c的dll和lib文件还有头文件copy到项目路径,然后在链接器-输入-附加依赖项加入 大猩猩.lib(你的库文件)。

在需要调用的地方包含头文件,然后就可以调用了,oyear!

发布了11 篇原创文章 · 获赞 8 · 访问量 2025
展开阅读全文

如何调用dll中类的方法

11-10

才学C++,正在研究dll动态调用,调用函数算是明白了,不知道怎么调用dll中类的方法,网上也没找到具体的实现。自己瞎想了一个办法,就是在包含类定义的dll中加一个返回该类实例指针的函数,再通过调用这个函数得到该类的实例指针。可是在调用类的方法时出错,信息如下: 2>ExeProj.obj : error LNK2019: unresolved external symbol "public: void __thiscall ClassA::M(void)" (?M@ClassA@@QAEXXZ) referenced in function _main 2>c:\users\administrator\documents\visual studio 2015\Projects\TestSln\Debug\ExeProj.exe : fatal error LNK1120: 1 unresolved externals dll中类的h文件如下: ``` #pragma once class ClassA { public: void M(); }; ``` dll中cpp文件如下: ``` #include <iostream> #include "ClassA.h" using namespace std; void ClassA::M() { cout << "I am invoked."; } extern "C" _declspec(dllexport) ClassA* CreatClassA() { return new ClassA; } ``` 调用程序cpp文件如下: ``` #include <Windows.h> #include <iostream> #include "../TestSln/ClassA.h" using namespace std; int main() { auto hmod = LoadLibrary("DllProj.dll"); if (hmod == NULL) { cout << "Load dll failed."; FreeLibrary(hmod); return 0; } auto hf = GetProcAddress(hmod, "CreatClassA"); if (hf == NULL) { cout << "Get funtion failed."; FreeLibrary(hmod); return 0; } typedef ClassA* (*pf)(); auto pClass = reinterpret_cast<pf>(hf)(); pClass->M(); FreeLibrary(hmod); delete pClass; return 0; } ``` 请专家指点: 1、调用dll中类的方法 的正确方法如何实现?烦请演示一下代码。 2、我的办法为什么出错?如何修正? 谢谢! 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览