1、对于标准的api函数 using System.Runtime.InteropServices;
[DllImport("XXX.DLL",EntryPoint="GetApiFunction",SetLastError=true)] public static extern int GetApiFunction( string strParaA, StringBuilder strParaB, int intParaC, out int intParaD, bool blnParaE);
C++数据类型和C#的部分对应关系:
C++ 输入输出 C# ================================== char chr[255] O StringBuilder KCA_DIR I int LPCSTR I string int I int LPSTR O StringBuilder int* O out int DWORD I int DWORD* O out int BOOL I bool Rc_DBMgr I IntPtr long* O out long
2、对于非标准的api的调用: A:引入XXX.DLL到项目;(如果Get_Name在:XXXNameSpace.YYYClass.Get_Name()) B: XXXNameSpace.YYYClass clsYYY = new XXXNameSpace.YYYClass(); clsYYY.Get_Name();
using System.Runtime.InteropServices;
[DllImport("XXX.DLL",EntryPoint="GetApiFunction",SetLastError=true)]
public static extern int GetApiFunction(
string strParaA,
StringBuilder strParaB,
int intParaC,
out int intParaD,
bool blnParaE);
C++数据类型和C#的部分对应关系:
C++ 输入输出 C#
==================================
char chr[255] O StringBuilder
KCA_DIR I int
LPCSTR I string
int I int
LPSTR O StringBuilder
int* O out int
DWORD I int
DWORD* O out int
BOOL I bool
Rc_DBMgr I IntPtr
long* O out long
2、对于非标准的api的调用:
A:引入XXX.DLL到项目;(如果Get_Name在:XXXNameSpace.YYYClass.Get_Name())
B:
XXXNameSpace.YYYClass clsYYY = new XXXNameSpace.YYYClass();
clsYYY.Get_Name();
3、如果1和2都不行的话,那就需要为该c++的dll增加c#调用的入口了。
楼上仁兄的方法在数据类型比较单一或简单的情况也是可取的。做过windows32编程的人都知道windowsAPI的数据类型是很特别和麻烦的,不过幸好人家编程环境提供的头文件帮了我们大忙,所以在VC++环境下编程调用原始dll还是比较舒服的。C++托管扩展编程依然可以用人家的头文件。但在C#中好象不行,你得重新移植。很痛苦的而且容易出错.....
2.如果你是导出类,那么就要用managed c++在中间作一层,让c#去调用这个类