C++函数定义
DWORD CalcGuid(DWORD dwGuid, void* pGuid);请教一下在C#中如何调用该方法,方法应该如何声明

解决方案 »

  1.   

    用DllImport(这里还要明确调用约定)
    int CalcGuid(int dwGuid, IntPtr pGuid);
      

  2.   

    谢谢bdmh版主,
    IntPtr pGuid 这个初始化怎么初始化?以下这样是对的吗?我这样做了之后得到一个SHEXPECTION 外部程序发生错误[DllImport("cplus.dll")]
    public static extern uint CalcGuid(uint dwGuid, IntPtr pGuid);IntPtr mm = new IntPtr(0);
    uint calResult = CalcGuid(dwGuid, mm);
      

  3.   

    如果你没有参考说明书,建议你把DWORD CalcGuid()的c++代码帖一些,void*可以是任何东西,因此你不知道如何具体初始化。
      

  4.   


    DWORD CalcGuid(DWORD dwGuid, void* pGuid);c++的代码现在没有,晚上我问问看pGuid指向的应该是一个string字符串如果是string字符串的话 
    我C#要怎么初始化这个指针呢?
      

  5.   

    如果使用IntPtr,需要给指针开一个内存空间(用Marsh)
    [DllImport("cplus.dll")]
    public static extern uint CalcGuid(uint dwGuid, IntPtr pGuid);
    或者使用byte数组来接收,在调用函数时,开一个相应大小的byte数组即可
    [DllImport("cplus.dll")]
    public static extern uint CalcGuid(uint dwGuid, byte[] pGuid);
    可以参见该文 "C#调用C++DLL传递结构体数组的终极解决方案"http://blog.csdn.net/xxdddail/article/details/11781003
      

  6.   

    我看C++的调用是这样的DWORD pguid = 0;CalcGuid(0x1E1B01,(void*)&pguid)然后在DEBUG windows 看到pguid的值是一串字符串那我C#要如何调用呢?
      

  7.   


            [DllImport("test.dll", CharSet=CharSet.Ansi)]
            public static extern uint CalcGuid(uint dwGuid, ref string pGuid);最后用这个ref string 调用成功了,谢谢大家!