如何调用.dll,说明文档都有。大家帮忙举个例子。

fts115 2011-07-07 12:45:41
调用test.dll:
long oa(unsigned long msgshow,unsigned long p,unsigned long c,char *str,LPTSTR com);
参数说明:
msgshow:业务类型;p:格式类型; c:长度;str:数据串;调用时,通过数据串传入参数;函数返回时,数据串中包含返回的数据; com:数据串口
使用注意:函数返回时向数据串中进行写操作。
函数返回值:函数通过字符串和函数返回值来返回函数的执行结果
当函数返回值等于0时,表示成功,字符串中包含了业务处理后返回的数据
当函数返回值不等于0时,出现错误。

我用C#如何调用如何得到返回的字符串?请大家举个例子。
...全文
269 25 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
fts115 2011-07-12
  • 打赏
  • 举报
回复
implementation
function oa(msgshow,p,c :longword ;str :PCHAR ;com :PCHAR):longint ;stdcall ;external 'oa.dll' name 'oa';
{$R *.dfm}
function TForm1.Space(vNum: Integer): string; //传入参数是你要的空格数量,整型值
var
i: Integer;
begin
Result := ''; //这里的两个引号之间没有空格,要连着写
for i := 1 to vNum do
begin
Result := Result + ' '; //这里的两个引号之间有一个空格,不要多写
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var fh :longint;
str,com : string;
begin
STR:=str+Space(255);
com:=TRIM(EDIT1.Text);
fh:=OltpTransData(1001,101,255,str,'com1');
if fh=0 then showmessage(str)
else showmessage(inttostr(fh));

这个是人家DELPHI做的程序。大家看看是我哪做错了。
fts115 2011-07-11
  • 打赏
  • 举报
回复
等待帮我解决问题。。。
cgzou 2011-07-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xuexiaodong2009 的回复:]
[DllImport("User32.dll")]
static extern Boolean MessageBeep(UInt32 beepType);
[/Quote]
不错,就是这个方法
fts115 2011-07-11
  • 打赏
  • 举报
回复
不好用。。。不好用。。。一直弄不出来。。。请高手指教一下。
  • 打赏
  • 举报
回复
用代码,获取在工具中引用
fts115 2011-07-10
  • 打赏
  • 举报
回复
求助啊。。。
孤独的行者牛 2011-07-09
  • 打赏
  • 举报
回复
孺子不可教……
fts115 2011-07-09
  • 打赏
  • 举报
回复
我还是没有弄出来。请高手指教。。。
fts115 2011-07-09
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 bduren 的回复:]

孺子不可教……
[/Quote]

关键一直提示参数错误。。。
fts115 2011-07-08
  • 打赏
  • 举报
回复
oa(UInt32 msgshow, UInt32 p, UInt32 c, StringBuilder str, string com);
其中StringBuilder str怎么赋值???
str:数据串;调用时,通过数据串传入参数;函数返回时,数据串中包含返回的数据;
使用注意:函数返回时向数据串中进行写操作。
函数返回值:函数通过字符串和函数返回值来返回函数的执行结果
当函数返回值等于0时,表示成功,字符串中包含了业务处理后返回的数据

急啊。。。在线等。。。
浪子-无悔 2011-07-08
  • 打赏
  • 举报
回复
来晚了,这么多高手给出答案了。
fts115 2011-07-08
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 mjp1234airen4385 的回复:]

com居然是AUTO?呵呵,可见对方的封装串口都不用你指定。自己找。
如果都真确,那就是strS的参数不正确了。
你有没有C++的调用例子,拿出来看看。
[/Quote]

oa(UInt32 msgshow, UInt32 p, UInt32 c, StringBuilder str, string com);
其中StringBuilder str怎么赋值???
str:数据串;调用时,通过数据串传入参数;函数返回时,数据串中包含返回的数据;
使用注意:函数返回时向数据串中进行写操作。
函数返回值:函数通过字符串和函数返回值来返回函数的执行结果
当函数返回值等于0时,表示成功,字符串中包含了业务处理后返回的数据
xuexiaodong2009 2011-07-07
  • 打赏
  • 举报
回复
[DllImport("User32.dll")]
static extern Boolean MessageBeep(UInt32 beepType);
xuexiaodong2009 2011-07-07
  • 打赏
  • 举报
回复
C/C++
dllimport的方式
fts115 2011-07-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 mjp1234airen4385 的回复:]

com居然是AUTO?呵呵,可见对方的封装串口都不用你指定。自己找。
如果都真确,那就是strS的参数不正确了。
你有没有C++的调用例子,拿出来看看。
[/Quote]
com文档写可以是AUTO。没有C++调用例子。我第一次弄这个东西。不会用。如果strS参数正确是不是写的就没有问题的?我也不知道参数正确不正确。。。
mjp1234airen4385 2011-07-07
  • 打赏
  • 举报
回复
com居然是AUTO?呵呵,可见对方的封装串口都不用你指定。自己找。
如果都真确,那就是strS的参数不正确了。
你有没有C++的调用例子,拿出来看看。
fts115 2011-07-07
  • 打赏
  • 举报
回复
OltpTransData(1001, 101, 126, strS, "AUTO")
复制错了。是oa(1001, 101, 126, strS, "AUTO")
fts115 2011-07-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dneg_zhou 的回复:]

刚好我前段时间写这些Dll调用的例子给你参考
extern "C" int TDTKAPI Test(int work_mode, char *Message)
{
if (work_mode==1)
{
if(Message != NULL)
sprintf(Message,"获取值为1!");
}
else
{
if(Message !=……
[/Quote]

[DllImport("test.dll", ExactSpelling = true, SetLastError = true)]
public static extern int oa(UInt32 msgshow, UInt32 p, UInt32 c, StringBuilder str, string com);
private void button_dq_Click(object sender, EventArgs e)
{
StringBuilder strS=new StringBuilder();
if (OltpTransData(1001, 101, 126, strS, "AUTO") == 0)
{
textBox_xx.Text = strS.ToString();
MessageBox.Show(OltpTransData(1001, 101, 126, strS, "AUTO").ToString());
}
else
{
MessageBox.Show("错误:" + OltpTransData(1001, 101, 126, strS, "AUTO").ToString());
}
}

每次单机按钮就应用程序错误,异常。请指教。。。
dneg_zhou 2011-07-07
  • 打赏
  • 举报
回复
刚好我前段时间写这些Dll调用的例子给你参考
extern "C" int TDTKAPI Test(int work_mode, char *Message)
{
if (work_mode==1)
{
if(Message != NULL)
sprintf(Message,"获取值为1!");
}
else
{
if(Message != NULL)
sprintf(Message,"获取值不正确!");
}
return 1;
}
在C#中这样调用:
[DllImport("testcomondll.dll")]
public static extern int Test(int workmode, StringBuilder Msg);
private void button2_Click(object sender, EventArgs e)
{
StringBuilder uFactoryCode = new StringBuilder();
//RWCard.rf_card(_iPonter, 0, ref uFactoryCode);
int aa = Form1.Test(1, uFactoryCode);
MessageBox.Show(uFactoryCode.ToString());
}
dneg_zhou 2011-07-07
  • 打赏
  • 举报
回复
long oa(unsigned long msgshow,unsigned long p,unsigned long c,char *str,LPTSTR com);
char *str 可以这样声明需要声明成StringBuilder 类型即可;
如:extern "C" int TDTKAPI Test(int work_mode, char* Message)
char* Message 是返回字符串在C#声明如下:
[DllImport("testcomondll.dll")]
public static extern int Test(int workmode, StringBuilder Msg);
这样肯定就没问题了
加载更多回复(3)

111,092

社区成员

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

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

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