C# 调用C++的dll

12 篇文章 0 订阅

C#调用C++的dll

 

C++:

__declspec(dllexport) int main3(LPCSTR  path);

__declspec(dllexport) int Multiply(int factorA, int factorB);

C#

 

[DllImport("ImageBase.dll",EntryPoint = "Multiply",CharSet = CharSet.Ansi)]

        staticextern int Multiply(int factorA, int factorB);

[DllImport("ImageBase.dll",EntryPoint = "main3",CharSet = CharSet.Ansi)]

        static extern int main3([MarshalAs(UnmanagedType.LPStr)]string PathName);

而C++生成的dll,可以放在system32里边,或者在C#的bin中,与exe文件同目录下

注意点:

1:每个dll里边的函数都要DllImport一下,而不像C++调用dll时候仅仅LoadLibrary一次。

2:在C#声明的参数里边使用字符串,比较特殊:

C++ main3(LPCSTR  path)

C#  main3([MarshalAs(UnmanagedType.LPStr)]string PathName);

各种C++与C#的参数对比:

http://lanhy2000.blog.163.com/blog/static/43678608201093054355990/

3: 问题:

在32位平台上可以正常运行。

在win7 64位上运行时,就会报函数出错。

解决办法:

项目右键属性->项目设计器->生成->平台->把'默认设置(任何 CPU)'改为x86。

因为'任何 CPU'的程序在64位的机器上就会用运行为64位,而64程序是不能加载32位dll的。






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值