C#调用C++编写的DLL中方法问题(方法中有传回参数)

zhangl80 2007-12-19 09:22:18
在C#中引用一个用C++编写的DLL文件 NT.dll,NT.dll中有一个方法:

int GetDateTime(int ID,int *YYYY,int *MM,int *DD,int *hh,int *nn,int *ss,int *W)
这个方法作用是根据ID,读取日期与时间

其中 YYYY,MM,DD,hh,nn,ss,W是日期和时间的传回参数。

请问我在C#中怎样调用这个方法取到日期和时间的值呢?越详细越好,谢谢各位!
...全文
186 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangl80 2007-12-20
  • 打赏
  • 举报
回复
用out和unsafe实现,哪个更好呢?
hapen_zhang 2007-12-19
  • 打赏
  • 举报
回复
因为声明的时候用的是Int16,所以调用的时候要对应参数类型啊,
Int16即short
leixueqiyi 2007-12-19
  • 打赏
  • 举报
回复
[DllImport(@"C:\NT.dll", CharSet = CharSet.Auto)]
public static extern Int16 GetDateTime(Int16 ID, out Int16 YYYY, int* MM, out Int16 DD, out Int16 hh, out Int16 nn, out Int16 ss, out Int16 W);

你再调用。

“为什么调用方法的时候参数不能声明为int类型呢,而是用short类型呢?”
是跟你调用定义重构的方法参数有关




zhangl80 2007-12-19
  • 打赏
  • 举报
回复
另外用out或unsafe实现,哪个更好呢?
zhangl80 2007-12-19
  • 打赏
  • 举报
回复
明白了,应该这样写:

short yyyy, mm, dd, hh, nn, ss, w;
GetDateTime(1, out yyyy, out mm, out dd, out hh, out nn, out ss, out w);

但是还有问题:GetDateTime方法声明的时候传出参数用的是int16类型
为什么调用方法的时候参数不能声明为int类型呢,而是用short类型呢?
haiwangstar 2007-12-19
  • 打赏
  • 举报
回复
不必用out 用指针。 函数加unsafe
zhangl80 2007-12-19
  • 打赏
  • 举报
回复
我是这样调用的:

int yyyy, mm, dd, hh, nn, ss, w;
GetDateTime(1, out yyyy, out mm, out dd, out hh, out nn, out ss, out w);

报错信息:

错误 1 与“WindowsApplication1.Form1.GetDateTime(short, out short, out short, out short, out short, out short, out short, out short)”最匹配的重载方法具有一些无效参数

错误 2 参数“2”: 无法从“out int”转换为“out short”

该怎么解决呢?
hapen_zhang 2007-12-19
  • 打赏
  • 举报
回复

[DllImport(@"C:\NT.dll", CharSet = CharSet.Auto)]
public static extern Int16 GetDateTime(Int16 ID, out Int16 YYYY, int* MM, out Int16 DD, out Int16 hh, out Int16 nn, out Int16 ss, out Int16 W);


然后象一般的函数调用就行了
擒兽 2007-12-19
  • 打赏
  • 举报
回复
我从来没搞过这,不过我想XML可以实现数据交互。激活后共享一个XML,呵呵。

110,535

社区成员

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

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

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