关于c# 引用c++编译的dll
一、VS2010中c++编译dll
出处:http://blog.csdn.net/cc_net/article/details/5653229
在VC++下选择【WIN32】--【WIN32项目】。在应用程序向导中,选择应用程序类型为DLL,并且选择为空项目。然后添加一个.h文件和一个.cpp文件
在.h中写: public static extern void XXX(char* source, char* source2);
在.cpp中正常写函数体即可。
二、VS2010中C#引用dll
1. using System.Runtime.InteropServices;
2. 进行声明: [DllImport("XXX",CallingConvention = CallingConvention.Cdecl)]
public static extern void openCVTT(string source, string source2);
3. 后面直接使用该函数即可。
三、注意
1. CallingConvention = CallingConvention.Cdecl一定要加上,原因见:http://topic.csdn.net/u/20110429/10/e9deee13-c87e-4f57-922e-a6ad73c2a1fe.html
2. 发生如下错误时:“尝试读取或写入受保护的内存。 这通常指示其他内存已损坏”,要注意C++和C#的数据类型转换。对应如下:
C++ C#
=====================================
WORD ushort
DWORD uint
UCHAR int/byte 大部分情况都可以使用int代替,而如果需要严格对齐的话则应该用bytebyte
UCHAR* string/IntPtr
unsigned char* [MarshalAs(UnmanagedType.LPArray)]byte[]/?(Intptr)
char* string
LPCTSTR string
LPTSTR [MarshalAs(UnmanagedType.LPTStr)] string
long int
ulong uint
Handle IntPtr
HWND IntPtr
void* IntPtr
int int
int* ref int
*int IntPtr
unsigned int uint
COLORREF uint
浙公网安备 33010602011771号