关于c# 调用C++dll,坐等强人出现!

cdreams 2011-04-23 06:44:27
我想调用一个C++DLL文件里一个函数,函数原型如下:
generate_container(int quantity, int destination, int weight,int ** Container)
其中的最后一个形参是要用来输出的,我想问的是,在c#声明这个函数时,最后一个参数应该如何声明?
我还要调用另一个函数,里面的参数有四维整型指针变量,更不知道应该如何弄了.

大家帮帮忙,这东西比较急,我学C#时间不长,这东西弄了好长时间了,谢谢啦!
...全文
365 31 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
rabbitlzx 2011-05-04
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 fjcfjcfjcfjc 的回复:]

引用 20 楼 rabbitlzx 的回复:
引用 19 楼 fjcfjcfjcfjc 的回复:

引用 14 楼 rabbitlzx 的回复:
out IntPtr

具体怎么操作啊?试了好久,都写不对啊!



[DllImport("XXXX.dll")]
public static void generate_container(int quantity, int ……
[/Quote]

这是从IntPtr中读取到一维数组,二维的就是两层遍历
private void HandleReturnedErrorCodes(IntPtr errors, int count)
{
IntPtr arrayPointer = Marshal.ReadIntPtr(errors);
int[] errorCodes = new int[count];
int errorValue = 0;
for (int i = 0; i < count; ++i)
{
errorValue = Marshal.ReadInt32(arrayPointer, i * Marshal.SizeOf(typeof(Int32)));
errorCodes[i] = errorValue;
}
}
cdreams 2011-04-29
  • 打赏
  • 举报
回复
高手在哪里啊??????????????????????????
cdreams 2011-04-27
  • 打赏
  • 举报
回复
郁闷啊,明天又要开会了,连续好几个星期都跟老师说没弄出来,我都不好意思继续说没弄出来了!!!我的救星在哪里哦!!!!!!!!!!!!!
cdreams 2011-04-27
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 flywei123 的回复:]
引用 3 楼 xiehuijianlove 的回复:
generate_container(int quantity, int destination, int weight,out int Container)
[/Quote]
呵呵,这个对于一维指针倒是可以的,二维就不行咯!
flywei123 2011-04-27
  • 打赏
  • 举报
回复
引用 3 楼 xiehuijianlove 的回复:
generate_container(int quantity, int destination, int weight,out int Container)


cdreams 2011-04-27
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 mjp1234airen4385 的回复:]
这个东西需要看dll是如何写的了。
问清楚最后一个参数是干什么的。
在dll内部是如果处理的。
最后你就知道如何定义和传入参数了。
[/Quote]
那个二维指针是用来返回一个二维数组的,当然DLL文件中对它赋了值。
看着你和你楼下那位仁兄的图像,真是纠结呀!呵呵
cdreams 2011-04-27
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 rabbitlzx 的回复:]
引用 19 楼 fjcfjcfjcfjc 的回复:

引用 14 楼 rabbitlzx 的回复:
out IntPtr

具体怎么操作啊?试了好久,都写不对啊!



[DllImport("XXXX.dll")]
public static void generate_container(int quantity, int destination, int weight, ……
[/Quote]

那个二维指针是用来返回一个二维数组的,那按你所说的方法调用后,怎样才能把这个数组的值输出来呢?假如这个数组是5*5的。
visir 2011-04-27
  • 打赏
  • 举报
回复
听说用ref int[]可以, 呵呵
mjp1234airen4385 2011-04-27
  • 打赏
  • 举报
回复
这个东西需要看dll是如何写的了。
问清楚最后一个参数是干什么的。
在dll内部是如果处理的。
最后你就知道如何定义和传入参数了。
西门喷血 2011-04-27
  • 打赏
  • 举报
回复
[DllImport("kernel32.dll")]

public static extern int GetProcAddress(int hModule, string lpProcName);
这是调用系统API的
C++的雷同
rabbitlzx 2011-04-27
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 fjcfjcfjcfjc 的回复:]

引用 14 楼 rabbitlzx 的回复:
out IntPtr

具体怎么操作啊?试了好久,都写不对啊!
[/Quote]


[DllImport("XXXX.dll")]
public static void generate_container(int quantity, int destination, int weight, out IntPtr Container)


调用时
IntPtr container = Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(Int32)));
generate_container( ..., out container);


cdreams 2011-04-26
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 rabbitlzx 的回复:]
out IntPtr
[/Quote]
具体怎么操作啊?试了好久,都写不对啊!
cdreams 2011-04-26
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wangrui0610 的回复:]
int 对应 C#中 byte
参数写法:out byte[][] Container
[/Quote]
呵呵,谢谢啦,数组应该是不行的,我都试过了
cdreams 2011-04-26
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 csrwgs 的回复:]
拿分

把指针转换成IntPTR
用Marshal.UseUnsafe....
[/Quote]
大哥,能说具体点吗?
showjancn 2011-04-25
  • 打赏
  • 举报
回复
好好研究一下“IntPtr” C#的这个类型,可以解决大部分从C++库中的转换问题。
rabbitlzx 2011-04-25
  • 打赏
  • 举报
回复
out IntPtr
csrwgs 2011-04-25
  • 打赏
  • 举报
回复
拿分

把指针转换成IntPTR
用Marshal.UseUnsafe....
shrinerain 2011-04-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wangrui0610 的回复:]
int 对应 C#中 byte
参数写法:out byte[][] Container
[/Quote]

-_-b
pluojie8 2011-04-25
  • 打赏
  • 举报
回复
sv2005在哪里下载好点
大笨蛋 2011-04-25
  • 打赏
  • 举报
回复
int 对应 C#中 byte
参数写法:out byte[][] Container
加载更多回复(8)

111,094

社区成员

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

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

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