当前位置:编程学习 > C#/ASP.NET >>

关于C#调用Win32 dll的问题。谢谢解答!

我自己开发的一个dll,一个函数的参数是char *。但实际上函数内部是将其理解为一个short数组的指针进行处理的。我在C#里面使用[dllimport],重命名的函数参数应该使用String,还是byte[]数组??谢谢。 --------------------编程问答-------------------- 定义成ref string 就可以了 --------------------编程问答-------------------- 用 ref string就可以了。
怎么看不到回复呢? --------------------编程问答-------------------- 我并不需要dll里面可以更改传入的值内容。而是用byte和String到底应该哪个更合适呢? --------------------编程问答-------------------- 各位大侠,救救急哈。在线等答案哦。 --------------------编程问答-------------------- 这样的话用string就可以了吧 --------------------编程问答-------------------- 如果用string,比较痛苦。我必须将C#里面的short[]转换成byte[],然后将byte[]转换成字符串。很耗时,同时我不知道是否会在这些转换过程中,我的short[]是否会被改变。 --------------------编程问答-------------------- 为什么要转换呢?
定义为ref string并不是说让你在dll中去改值,而是加了ref后,可以认为传入的就是一个地址指针,与dll的参数是一致,至于内容,不需要把string转换成什么short[]或byte[]数组,只要dll拿到地址指针,就可以顺序读取到里面的值了。

一般应用中,不加ref也是可以的,但如果dll中对值有改变而外面又需要时是需要加的。 --------------------编程问答-------------------- 谢谢kemin的回答,但关键是我在C#里面就必须传入一个String哒。而我没有这个String,只有short[],所以我必须进行转换。 --------------------编程问答-------------------- C#中short类型与char类型是可以相互转换的,实际上,char类型在内存中保存的就是一个short值,如:
     char c1 = '中';
     short s1 = (short)c1;
     char c2 = (char)s1;
能完全转换而不会走样。所以要将short[]数据转换成字符串完全不是问题,直接转成char再拼成string就行了。
先转换成byte[]再转字串,编码问题相当麻烦。 --------------------编程问答-------------------- 大概明白你的意思了。那是因为char刚好是两个字节。我如果是int或者double呢?我的确有这样的函数。

顺便问下dll的函数abc(char *pData),我可否如下这样使用。
[Dllimport(……)]
abc(byte[] pdata)。

如果可以,我愿意选择这种方式。 --------------------编程问答-------------------- 各位兄弟,帮忙看看啊。急需答案哦! --------------------编程问答-------------------- 楼上的说法看似可以。我觉得那是因为char刚好和short一样长。那int,或者double怎么办呢?如何将int[]转换成String呢?
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,