打包dll

C#调用dll文件

基本操作

dll头文件中

extern "C" _declspec(dllexport) double _stdcall qAdd(double a, double b);

dll源文件中

#include "test.h"

_declspec(dllexport)  double _stdcall qAdd(double a, double b) {
	return a + b;
}

c#代码中

[DllImport("Win32Project1.dll")]
static extern double qAdd(double a, double b);
[DllImport("Win32Project1.dll")]
static extern double qSub(double a, double b);

//_declspec 是Microsoft VC中专用的关键字,
//配合着一些属性可以对标准的C/C++进行补充,
//应该出现在声明的前面。
//_declspec(dllexport) 声明导出函数、类、对象等供外面调用,
//作为动态库的对外接口函数、类等;
//_stdcall 被该关键字修饰的函数,其参数都是从右向左通过堆栈传递的,
//函数调用在返回前要由被调用者清理堆栈。

问题总结

错误1:视图加载格式不正确的程序
原因:可能存在多种原因,参考https://www.cnblogs.com/sundajade/articles/3735663.html
此处为vs平台造成的问题
解决方案:修改C#程序项目-属性-生成-目标平台:x64

错误2:DllNotFoundException,无法加载DLL:…
原因:缺少第三方类库,参考https://blog.csdn.net/wxnjob/article/details/73794574
解决方案:将DDS依赖的所有类库复制到C#项目目录(WindowsFormsApplication1\bin\Debug)下解决

C++调用可调用同样dll文件

基本操作

此处采用隐式链接方法调用,在C++项目中如下操作:
需要用到的文件有:.h文件、.lib文件、.dll文件
步骤为:1.添加包含目录;
2.添加库目录;
3.添加.lib依赖项或在代码中添加lib,如#pragma comment(lib,“test_dynamic.lib”) ;
4.包含.h头文件,如#include “export_dll.h”;
5.dll复制到运行目录下,同时将dll需要的依赖库复制到运行目录下。

问题总结

错误3:无法解析的外部符号,使用C++语言(补充错误,此处切换为了C++语言)调用DLL时出现
原因:猜测同错误1,vs平台造成,参考https://blog.csdn.net/qq_37979572/article/details/80085359
解决方案:同错误1,修改C++程序项目-属性-配置管理器-项目解决方案平台:x64

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值