C#中调用C++的dll类型不匹配,该怎么办? 把你lzk.dll中getfamilyname的代码贴出来看看 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 lzk.dll里边的类型转换问题吧! C++ 中的 char * 是一个指针,显然它只能映射到 C#中的引用类型,而C#中的char是一个值类型啊 要么用字符串,要么用C#中 char * 头文件: 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调用的可正确运行的实例.多谢赐教了!! 这个问题实质上就是C++和C#数据类型转换问题,C#里没有char *的数据类型的,据我所知. 别人用 char * ,目的应该是指向一段内存,然后函数返回的值可以从这边读到你在C#中也用指针就好了啊,StringBuild是引用类型,还有个char数组的首地址也行数组的名字其实就是首地址,但是要保证数组比较长能足够容纳下返回的内容,要不就报什么引起错误啊什么的乱七八糟的错误 使用string ,stringBuilder,抛出异常:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。使用byte[],抛出异常:无法封送处理“return value”: 无效的托管/非托管类型组合。使用char,结果是乱码,不知道用什么类型了都,也不知道哪里出错了:( 用IntPtr 类型的 然后转换成其他类型就可以 你最好在C++中把一些类型都用标准类型来定义..如整形等.不要用一些如char 等类型的.另外.net不是有个CLS和CTS,符合这两规范的代码,调用应该不会有什么问题.因为两语言的编码方式不一样的. c# picturebox里画线问题(画的线超出边缘后怎么自动左移)? com组件奇怪的问题 vs2005复制文件 做了一个左右框架,左边是一排链接,我如何实现点击这些链接右框架集就会显示相应的页面呢? C#的函数中真的就不能设静态变量吗? Sn.exe能否显示assembly中的密钥? 从Socket中异步高速读取数据时,收到的部分数据包不完整 如何,将字符串中的四位,用*代替 win7访问.net网站老有错误 如有好的想法请指示!动态加载控件问题,路过的都来看一下噢 用winform登陆网站怎么实现啊? 没人知道麽~~~
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调用的可正确运行的实例.
多谢赐教了!!
你在C#中也用指针就好了啊,StringBuild是引用类型,还有个char数组的首地址也行
数组的名字其实就是首地址,但是要保证数组比较长能足够容纳下返回的内容,要不就报什么引起错误啊什么的乱七八糟的错误
因为两语言的编码方式不一样的.