请教高手:为什么dll里面的值传不到主程序?在线等待.急!!!!!!!!!!

casio 2003-03-13 05:25:27
我是初学者,请教高手:

明明下面dll函数中的char * cc值发生了变化,为什么vb调用函数部分[ Call RSWR(1, st) ]中的st却没有任何改动?我究竟错在哪里?

跟贴有分。多谢解惑。


/////////////////////////////////////////////////////
dll函数:
extern "C" short APIENTRY RSWR(int num,char *cc) //Read
{
cc=m_ComPort[num].ReadComm();
AfxMessageBox(cc); //此处cc的值已经发生了改动
}

/////////////////////////////////////////////////////////
VB声明:
Declare Function RSWR Lib "magcard.dll" (ByVal i As Integer, ByRef str As String) As Integer


///////////////////////////////////////////////////////////
VB调用函数:
Private Sub Command2_Click()
Dim st As String
Call RSWR(1, st) 'read
MsgBox st //为何这里st的值没有任何改动?
End Sub


我究竟错在那里?
...全文
133 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Damachli 2003-03-13
  • 打赏
  • 举报
回复
在VB中使用的函数不能用EXTERN说明,要用PASCAL
casio 2003-03-13
  • 打赏
  • 举报
回复

问题已解决,多谢StdAfx(任杰)帮忙。:)))))))))

StdAfx 2003-03-13
  • 打赏
  • 举报
回复
http://www.china-askpro.com/msg46/qa55.shtml
maoxianwang 2003-03-13
  • 打赏
  • 举报
回复
:(

我也不会呀:(
casio 2003-03-13
  • 打赏
  • 举报
回复


问的太简单了不屑回答?

欲哭无泪ing~~


casio 2003-03-13
  • 打赏
  • 举报
回复

其实说穿了一句话:

怎样把dll里面得到的字符串类型的值送到主程序(vb)里。。高手救救我啊!!^o^
casio 2003-03-13
  • 打赏
  • 举报
回复
extern "C" __declspec( dllexport ) short RSWR(int num,char *cc) //Read
{
cc=m_ComPort[num].ReadComm();
AfxMessageBox(cc); //此处cc的值已经发生了改动
return 1;
}

刚写错。已经 return 了,只是刚才忘记写上去。我是刚才你说的那样改的。但会报"bad dll calling convention"错误。不清楚究竟是哪个变量对应错了。麻烦指教。谢谢



StdAfx 2003-03-13
  • 打赏
  • 举报
回复
应该这样声明:

extern "C" __declspec( dllexport ) short RSWR(int num,char *cc) //Read

而且既然你声明要返回一个 short的值,那么你的函数结束的时候就应该返回一个 short值的啊。
casio 2003-03-13
  • 打赏
  • 举报
回复

qiufl(风里来) ,感激ing....

大侠可怜可怜小弟,我究竟错在那里啊?谢谢!!

qiufl 2003-03-13
  • 打赏
  • 举报
回复
up , 帮你up
casio 2003-03-13
  • 打赏
  • 举报
回复
StdAfx(任杰)


///////////////我按照你的方法把dll函数:
extern "C" short APIENTRY RSWR(int num,char *cc) //Read
{
cc=m_ComPort[num].ReadComm();
AfxMessageBox(cc); //此处cc的值已经发生了改动
}
////////////////////////改成了
extern "C" short APIENTRY RSWR(int num,char *cc) //Read
{
cc=m_ComPort[num].ReadComm();
AfxMessageBox(cc); //此处cc的值已经发生了改动
}
//////////////结果出现"bad dll calling convention"错误


还会是那里不对呢?谢谢

AthlonxpX86 2003-03-13
  • 打赏
  • 举报
回复
记得在那本书上好像说过DLL的一个重要缺点,一般来说DLL和调用端程序应该在同一类型编译器编译才能避免错误,如果在不同编译器编译了,虽然有时候不会出现错误,但是一旦出错,这种错误将是很难排除的,所以就有了COM机制
AthlonxpX86 2003-03-13
  • 打赏
  • 举报
回复
不懂VB,帮你UP
StdAfx 2003-03-13
  • 打赏
  • 举报
回复
是的,正确的语法应该就是我上面给你写的那个。
casio 2003-03-13
  • 打赏
  • 举报
回复
谢谢你,StdAfx

是不是我的语法错了?谢谢





StdAfx 2003-03-13
  • 打赏
  • 举报
回复
你这样试一下:
extern "C" __declspec( dllexport ) RSWR(int num,char *cc) //Read
casio 2003-03-13
  • 打赏
  • 举报
回复


没人回复么?

绝对给分。分不够可以重新发贴补上.

有那位大侠可怜可怜小弟啊?:((((((((((((((((

谢谢了.......




15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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