把你lzk.dll中getfamilyname的代码贴出来看看

解决方案 »

  1.   

    lzk.dll里边的类型转换问题吧!
      

  2.   

    C++ 中的 char * 是一个指针,显然它只能映射到 C#中的引用类型,而C#中的char是一个值类型啊
      

  3.   

    要么用字符串,要么用C#中 char *
      

  4.   

    头文件: 
    extern "C" __declspec(dllexport) char * getfamilyname();
    函数实现:
    //return "lzk"
    extern "C" __declspec(dllexport) char * __stdcall getfamilyname();
    char *name = "lzk";
    char * __stdcall getfamilyname()
    {
    return name;
    }好象是这样的,现在的问题是1)不知道在C++中的char *类型对应C#中的什么类型,网上资料是说对应byte[],但是我测试后还是没有出来正确结果;2)public  static extern char getfamilyname();这样声明不知道对不对,也有待验证.
    最后能提供对应char *的函数dll调用的可正确运行的实例.
    多谢赐教了!!
      

  5.   

    这个问题实质上就是C++和C#数据类型转换问题,C#里没有char *的数据类型的,据我所知.
      

  6.   

    别人用 char * ,目的应该是指向一段内存,然后函数返回的值可以从这边读到
    你在C#中也用指针就好了啊,StringBuild是引用类型,还有个char数组的首地址也行
    数组的名字其实就是首地址,但是要保证数组比较长能足够容纳下返回的内容,要不就报什么引起错误啊什么的乱七八糟的错误
      

  7.   

    使用string ,stringBuilder,抛出异常:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。使用byte[],抛出异常:无法封送处理“return value”: 无效的托管/非托管类型组合。使用char,结果是乱码,不知道用什么类型了都,也不知道哪里出错了:(
      

  8.   

    用IntPtr 类型的 然后转换成其他类型就可以
      

  9.   

    你最好在C++中把一些类型都用标准类型来定义..如整形等.不要用一些如char 等类型的.另外.net不是有个CLS和CTS,符合这两规范的代码,调用应该不会有什么问题.
    因为两语言的编码方式不一样的.