本帖最后由 hjm1980_2007 于 2011-04-15 09:33:09 编辑

解决方案 »

  1.   

    自己去查数据类型对照,unsigned char *这个可以用string代替,如果是结构体指针,可以用ref 结构体实例 来表示
      

  2.   

    其实C#调用C++ 的DLL文件很简单,首先自己建立一个专门用于调用dll文件接口函数的一个类,然后把System.Runtime.InteropServices;命名空间添加到类中,然后按照
    [DllImport("DSCAMSDK.dll", EntryPoint = "CameraInit", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
            public static extern tagDS_CAMERA_STATUS CameraInit(dllfun_DS_SNAP_pROC pCallbackFunction, tagDS_RESOLUTION uiResolution, IntPtr hWndDisplay, UInt32 lpThreadparam);
    的方式进行调用,当然C++和C#的数据类型是不一样的,你得根据dLL文件中函数的源码将C++的数据类型转换为C#的数据类型,网上有很多这方面的资料,如http://hi.baidu.com/%B3%C9%B6%BC%B9%FD%BF%CD/blog/item/c3b9ed897866d6d8fd1f10ae.html  写完这个类类后,在你的项目中就能像调用C#本身的库函数一样调用就行,当然如果dll中有回调函数(传说中的函数指针),你得在C#中用委托来处理。
      

  3.   


    APi基本函数调用是没有问题,主有些函数类型不知道怎么替换还有指针方面,我为什么贴出这么详细的代码,就是因为有些不知道怎么用C#去实现和替换,所以很想有那位兄弟能我,真的真的非常感谢
      

  4.   

    参数中没有C++的类对象还行,要是有类对象的话建议还是先用c++包装一层;要是结构体指针的话,首先得拿到c++定义的结构体,然后对应定义C#的结构体,否则也没法调用。
      

  5.   

    已第一个为例:
    PLAYSDK_API int WINAPI PlaySDK_SendOneFrame(HANDLE hPlayHandle, unsigned char *frameBuf, int frameLen);
    ——————————————————————
    [DllImport("DynamicDLL.dll", EntryPoint = "PlaySDK_SendOneFrame")]
    public int extern PlaySDK_SendOneFrame(IntPtr hwnd,string str,int i)
    也可以把他写成静态函数
      

  6.   

    IntPtr hwnd的化传入窗体Handle就是了