none
[已解决]求一个C#调用C++的函数的方法 RRS feed

  • 问题

  • pfile,result,pcut还是获取不到值,我把现在的完整代码帖一次,高手们看看有没有错
    要求,4个参数都要获得返回值
    _declspec(dllexport)  char* Test(char* pfile,RECT* rect,char* result,BYTE *pcut)
    {   
        rect->left=pcut[55500];
        rect->right=20;
        rect->top=30;
        rect->bottom=40;
        pcut[0]=100;
        pcut[1]=200;
        pcut[2]=300;
        pcut[3]=400;
        pcut[4]=500;
        pcut[5]=600;
        pcut[6]=700;
        pcut[7]=800;
        pcut[8]=900;
        pcut[9]=110;
        result="abcdef";
        pfile ="test";
        return  "0";
    }


    C#的:
    public static extern string Test(ref string pfile, ref Rectangle rect,ref string result, [MarshalAs(UnmanagedType.LPArray, SizeConst = 10)] byte[] pcut);
    2009年8月19日 6:26

答案

  • C/C++

    C#

    Int, Long

    int

    Int *

    Ref int

    LPCSTR, const char *

    [MarshalAs(UnmanagedType.LPSTR)]

    string

    LPCTSTR, const TCHAR *

    [MarshalAs(UnmanagedType.LPTSTR)]

    string

    LPSTR, char *

    [MarshalAs(UnmanagedType.LPSTR)]

    stringBuilder

    LPTSTR, TCHAR *

    [MarshalAs(UnmanagedType.LPTSTR)]

    stringBuilder

    Byte [n] str

    [MarshalAs(UnmanagedType.LPArray)]

     byte[]str

    WORD

    uInt16

    Byte, unsigned char

    byte

    Short

    Int16

    float

    single

    double

    double

    DWORD, unsigned long, Ulong

    [MarshalAs(UnmanagedType.U4)]

    UInt32

    bool

    bool

    HANDLE, LPDWORD, LPVOID, void*

    IntPtr

    NULL pointer

    IntPtr.Zero

       

    你参考一下
    family as water
    2009年8月20日 1:59
  • 把ref去掉试试!
    周雪峰
    2009年8月19日 10:13
    版主
  • 用stringbuilder返回字符串

    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2009年8月19日 12:47
    版主

全部回复

  • 你好!
         请问现在的具体情况是怎样的,是报错,还是取到值不正确?
    周雪峰
    2009年8月19日 8:56
    版主
  • 取不到值,我用ref返回参数根本没用,真郁闷,但是程序是正常的,而且函数返回的string我也能得到
    2009年8月19日 9:11
  • 把ref去掉试试!
    周雪峰
    2009年8月19日 10:13
    版主
  • 用stringbuilder返回字符串

    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2009年8月19日 12:47
    版主
  • C/C++

    C#

    Int, Long

    int

    Int *

    Ref int

    LPCSTR, const char *

    [MarshalAs(UnmanagedType.LPSTR)]

    string

    LPCTSTR, const TCHAR *

    [MarshalAs(UnmanagedType.LPTSTR)]

    string

    LPSTR, char *

    [MarshalAs(UnmanagedType.LPSTR)]

    stringBuilder

    LPTSTR, TCHAR *

    [MarshalAs(UnmanagedType.LPTSTR)]

    stringBuilder

    Byte [n] str

    [MarshalAs(UnmanagedType.LPArray)]

     byte[]str

    WORD

    uInt16

    Byte, unsigned char

    byte

    Short

    Int16

    float

    single

    double

    double

    DWORD, unsigned long, Ulong

    [MarshalAs(UnmanagedType.U4)]

    UInt32

    bool

    bool

    HANDLE, LPDWORD, LPVOID, void*

    IntPtr

    NULL pointer

    IntPtr.Zero

       

    你参考一下
    family as water
    2009年8月20日 1:59
  • 谢谢各位,终于解决了哈,又学到了很多
    2009年8月20日 3:32
  • 不客气啊!
    欢迎常常来这里和大家交流啊!

    另外,请记得把你认为正确的回复“标记为答复”,这样可以让和你遇到同样问题的人搜索到这个答复,同时也是对回复问题的同行的认可和尊重啊!
    周雪峰
    2009年8月20日 6:11
    版主
  • 你好!我最近也在做C#调用C++写的dll ,现在出现一个问题,就是c++的函数里有这样一个参数 char* argv[]
    请问,C#里,我该怎么样传参数给他!
    __declspec(dllimport) int PlayerDoOpen(HWND hOwner,LPRECT lpRect,int argc,char *argv[]);//播放资源

    请问C#改怎么样调用这个函数
    2009年10月21日 3:57