问题描述
我自己开发的一个dll,一个函数的参数是char*。但实际上函数内部是将其理解为一个short数组的指针进行处理的。我在C#里面使用[dllimport],重命名的函数参数应该使用String,还是byte[]数组??谢谢。
解决方案
解决方案二:
定义成refstring就可以了
解决方案三:
用refstring就可以了。怎么看不到回复呢?
解决方案四:
我并不需要dll里面可以更改传入的值内容。而是用byte和String到底应该哪个更合适呢?
解决方案五:
各位大侠,救救急哈。在线等答案哦。
解决方案六:
这样的话用string就可以了吧
解决方案七:
如果用string,比较痛苦。我必须将C#里面的short[]转换成byte[],然后将byte[]转换成字符串。很耗时,同时我不知道是否会在这些转换过程中,我的short[]是否会被改变。
解决方案八:
为什么要转换呢?定义为refstring并不是说让你在dll中去改值,而是加了ref后,可以认为传入的就是一个地址指针,与dll的参数是一致,至于内容,不需要把string转换成什么short[]或byte[]数组,只要dll拿到地址指针,就可以顺序读取到里面的值了。一般应用中,不加ref也是可以的,但如果dll中对值有改变而外面又需要时是需要加的。
解决方案九:
谢谢kemin的回答,但关键是我在C#里面就必须传入一个String哒。而我没有这个String,只有short[],所以我必须进行转换。
解决方案十:
C#中short类型与char类型是可以相互转换的,实际上,char类型在内存中保存的就是一个short值,如:charc1='中';shorts1=(short)c1;charc2=(char)s1;能完全转换而不会走样。所以要将short[]数据转换成字符串完全不是问题,直接转成char再拼成string就行了。先转换成byte[]再转字串,编码问题相当麻烦。
解决方案十一:
大概明白你的意思了。那是因为char刚好是两个字节。我如果是int或者double呢?我的确有这样的函数。顺便问下dll的函数abc(char*pData),我可否如下这样使用。[Dllimport(……)]abc(byte[]pdata)。如果可以,我愿意选择这种方式。
解决方案十二:
各位兄弟,帮忙看看啊。急需答案哦!
解决方案十三:
楼上的说法看似可以。我觉得那是因为char刚好和short一样长。那int,或者double怎么办呢?如何将int[]转换成String呢?