关于调用unmanager dll函数通过指针返回值的问题

longbow74 2003-02-25 11:11:44
函数定义如下
extern "C" BOOL PASCAL EXPORT test(MyClass1 *class1,MyClass2 *class2,BOOL bSmall)
class1是用来输入,class2是用来返回的
C#里面该如何调用得到返回值?

我这样声明的
public class Win32
{
[DllImport("mydll.dll")]
public static extern void test(MyClass1 class1,MyClass2 class2,BOOL bSmall);
}

但是值能送进去,得不到返回值
public static extern void test(MyClass1 class1,ref MyClass2 class2,BOOL bSmall);
跳出异常
...全文
42 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qqchen79 2003-02-27
  • 打赏
  • 举报
回复
把所有的String改成StringBuilder
String是单向传值的,Native改编的结果不会复制到managed代码中。
longbow74 2003-02-27
  • 打赏
  • 举报
回复
我调用这个是可以的
public class Win32 {
[DllImport("Kernel32.dll")]
public static extern void GetSystemTime(ref SystemTime sysTime);
...
}
自己的为什么不行?
longbow74 2003-02-27
  • 打赏
  • 举报
回复
Exception:
An unhandled exception of type 'System.TypeLoadException' occurred in testGdt.exe
Additional information: 封送拆收器限制:StringBuilder 不能用于结构字段。通过使用 String 字段并将它预初始化为长度与适当缓冲区长度相匹配的字符串,通常可达到相同的效果。

我传送的是个结构或类.
另外整型我也得不到返回结果
colin666 2003-02-26
  • 打赏
  • 举报
回复
up
longbow74 2003-02-26
  • 打赏
  • 举报
回复
[ StructLayout( LayoutKind.Sequential )]
public class class1{
public int Color;
public int PlateBase;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=255)]
public String LibraryDevice;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=255)]
public String ImageFileName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=25)]
public String ControlBranch;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=4)]
public String VehicleClassNumber;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=4)]
public String KanaCharacter;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=6)]
public String VehicleNumber;
};

在dll里
class class1{
public:
long Color;
long PlateBase;
char LibraryDevice[255];
char ImageFileName[255];
char ControlBranch[25];
char VehicleClassNumber[4];
char KanaCharacter[4];
char VehicleNumber[6];
};

class2类似

不用ref参数但是在dll里修改了class2的值,从dll返回却发现值并没有改变
longbow74 2003-02-26
  • 打赏
  • 举报
回复
可是我觉得是这么做的啊,返回的结果没有改变,好像c里面的传值一样
windyyang 2003-02-26
  • 打赏
  • 举报
回复
详细请见:
http://www.aspxcn.com/dotnetarticle/show.aspx?id=130
qqchen79 2003-02-25
  • 打赏
  • 举报
回复
把MyClass1和MyClass2在C/C#的声明贴上来。
如果声明是class,那么就用不着ref了,否则是struct的话,class1和class2的声明都必须加上ref。

110,538

社区成员

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

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

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