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的。