新人求助:关于dll的调用

dinjay 2011-07-18 02:43:22
本人c#一窍不通,只会c,c++和java。
现在有个任务,希望用c#调用一些我们用c写的接口。
dll函数如下:
int GetVersion(unsigned char *pbyMajor,
unsigned char *pbyMinor,
unsigned long *piRevision);
c#中调用:
public class Test
{
[DllImport("test.dll", EntryPoint = "GetVersion",
CharSet = CharSet.Ansi,
CallingConvention = CallingConvention.StdCall)]
public static extern int GetVersion(ref string pbyMajor,
ref string pbyMinor,
ref string piRevision);
}
main中调用:
string t1 = "";
string t2 = "";
string t3 = "";
int r = Test.GetVersion(ref t1, ref t2, ref t3);
但是获取到的t1,t2,t3内容是不正确的,所以不知道是什么问题,这三个参数都属出参。
谢谢各位。
...全文
78 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
a220315410 2011-07-18
  • 打赏
  • 举报
回复
可以试试把string替换为StringBuilder。
如果还不行的话,把String替换为IntPtr,然后用Marshal.PtrToStringAnsi函数转成String
sdl2005lyx 2011-07-18
  • 打赏
  • 举报
回复
LZ,函数映射有问题:

public static extern int GetVersion(ref byte pbyMajor, ref byte pbyMinor, ref int piRevision);

你再试试!
xuexiaodong2009 2011-07-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 tangyong12 的回复:]

把string用StringBuilder替换试试
[/Quote]试试
tangyong12 2011-07-18
  • 打赏
  • 举报
回复
把string用StringBuilder替换试试
dinjay 2011-07-18
  • 打赏
  • 举报
回复
是的,返回的就是字符串。dll应该是memcpy到传入的buffer里的。
guiwenyang 2011-07-18
  • 打赏
  • 举报
回复
学习中。。。
bdmh 2011-07-18
  • 打赏
  • 举报
回复
unsigned char *,和char* 不一样,你确认是返回string类型吗

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧