有用C#调用过dll的高手请进,高分。

onlyonetime 2006-09-17 05:54:10
DLL原型
short GetNumber( byte Msg[31] );
说明:
cardNo[31]: 0-11是卡号,12-13是时间,14-30操作员
关键是C#调用时参数如何传递。
...全文
670 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangzehuan2002 2006-09-19
  • 打赏
  • 举报
回复
.net 技术交流群 欢迎大家的加入
群内高手为您解疑
群号 : 11623794
wugencao520 2006-09-19
  • 打赏
  • 举报
回复
mark
snail_hm 2006-09-18
  • 打赏
  • 举报
回复
这个得声明31个变量的吧
Knight94 2006-09-18
  • 打赏
  • 举报
回复
你时间转换格式是如何,具体约定是什么
onlyonetime 2006-09-18
  • 打赏
  • 举报
回复
怎么没有人回答啊,高手都去哪儿了?
onlyonetime 2006-09-18
  • 打赏
  • 举报
回复
不行啊,各位高手给一个DEMO
DLL原型
short GetNumber( byte Msg[31] );
说明:
cardNo[31]: 0-11是卡号,12-15是时间,16-30操作员

卡号 = "12345";
时间 = "2006-12-1";
操作员 = "TEST";
如何将写这个DEMO。快,很急。

myminimouse 2006-09-18
  • 打赏
  • 举报
回复
帮顶
lanserzhao 2006-09-18
  • 打赏
  • 举报
回复
ASP.NET(C#)技术讨论群:30417196,限工作人士
onlyonetime 2006-09-18
  • 打赏
  • 举报
回复
自己顶一下.
onlyonetime 2006-09-18
  • 打赏
  • 举报
回复
(更正)
Knight94(愚翁)
short GetNumber( byte Msg[31] );
说明:
cardNo[31]: 0-11是卡号,12-15是时间,16-30操作员

卡号 = "12345";
时间 = "2006";
操作员 = "TEST1";
+++++++++++++++++++++++++++++++
好像你这样做有点问题.我给你看一下我的引用,请指点.
[DllImport("Test.DLL")]
public static extern short GetNumber( ref System.Text.StringBuilder strMsg );

调用:
public staitc short TestDll()
{
StringBulider st = new StringBulider("1234500000002006TEST1");
short i = GetNumber( ref st )
return i;
}
您帮我看一下我这样做问题错在哪里,谢谢。
说明:原DLL中的传入参数是引参,不是值参,所以我用了"ref".
以上DLL说明中提供了一个VFP的调用例子,如下
declare short GetNumber in TestDll;
string @Msg
onlyonetime 2006-09-18
  • 打赏
  • 举报
回复
short GetNumber( byte Msg[31] );
说明:
cardNo[31]: 0-11是卡号,12-15是时间,16-30操作员

卡号 = "12345";
时间 = "2006";
操作员 = "TEST1";
+++++++++++++++++++++++++++++++
好像你这样做有点问题.我给你看一下我的引用,请指点.
[DllImport("Test.DLL")]
public static extern short GetNumber( ref System.Text.StringBuilder strMsg );

调用:
public staitc short TestDll()
{
StringBulider st = new StringBulider("1234500000002006TEST1");
short i = GetNumber( ref System.Text.StringBuilder strMsg )
return i;
}
您帮我看一下我这样做问题出在哪里,谢谢。
说明:原DLL中的传入参数是引参,不是值参,所以我用了"ref".
以上DLL说明中提供了一个VFP的调用例子,如下
declare short GetNumber in TestDll;
string @Msg
Knight94 2006-09-18
  • 打赏
  • 举报
回复
如果是string => byte[]
byte[] bData = Encoding.ASCII.GetBytes( yourString );

至于整合,通过Array.Copy来合并。
onlyonetime 2006-09-18
  • 打赏
  • 举报
回复
Knight94(愚翁),你说的对,时间转换我忘记写,这个先不要考虑啦,就当12-15是几个字符,我关键想知道的是像这种DLL在C#中如何调用,给我一个DEMO啊,谢谢!谢谢大家!
alien54155415 2006-09-18
  • 打赏
  • 举报
回复
byte[] bb = new byte[31];
for(int k=0;k<bb.Length;k++)
bb[k] =(byte)k;
short sh = GetNumber(bb);
问题在于数据转到byte[]的格式
jijl2001 2006-09-17
  • 打赏
  • 举报
回复
楼上正解
下面是一个调用API函数的例子:
[DllImport("KERNEL32.DLL", EntryPoint="MoveFileW", SetLastError=true,
CharSet=CharSet.Unicode, ExactSpelling=true,
CallingConvention=CallingConvention.StdCall)]
public static extern bool MoveFile(String src, String dst);

你直接用MoveFile方法就行了
Knight94 2006-09-17
  • 打赏
  • 举报
回复
have a try!
[DllImport(...)]
extern static Int16 GetNumber( byte[] Msg );
jointan 2006-09-17
  • 打赏
  • 举报
回复
好象直接传入一个struct就可以了吧
lizhizhe2000 2006-09-17
  • 打赏
  • 举报
回复
在程序中引入DLL和命名空间后,和本工程的函数并不太多区别(我指用法上)
xjjdanran 2006-09-17
  • 打赏
  • 举报
回复
在C#中申明前指明调用DLL的位置及对应的函数名,然后参数用StringBuild类型
其它代码就能直接当自己的函灵敏调用了

110,533

社区成员

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

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

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