关于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

posted @ 2012-06-25 16:44  water1417  阅读(180)  评论(0)    收藏  举报