请教高手:为什么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


我究竟错在那里?
...全文
167 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
  • 打赏
  • 举报
回复


没人回复么?

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

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

谢谢了.......




内容概要:本文围绕“基于超局部模型与自抗扰ESO观测器的无模型预测电流控制改进策略”展开研究,提出一种结合超局部模型(ULM)与扩张状态观测器(ESO)的无模型预测电流控制(MFPCC)改进方法,旨在提升永磁同步电机(PMSM)电流环的动态响应性能与抗干扰能力。该策略利用超局部模型对系统行为进行局部逼近,避免依赖精确数学模型,同时引入自抗扰控制中的ESO实时观测并补偿系统内外部扰动,有效抑制参数摄动、负载变化及模型不确定性带来的影响。研究通过Simulink搭建完整的控制系统仿真模型,对传统MFPCC与所提改进策略进行对比分析,验证了新方法在电流跟踪精度、响应速度和鲁棒性方面的优越性。; 适合人群:具备电机控制、现代控制理论及Simulink仿真基础的电气工程、自动化及相关专业的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于高性能电机驱动系统中电流环控制器的设计与优化;②为无模型控制与自抗扰控制的融合应用提供技术参考;③支撑相关课题的仿真验证、论文复现与创新方法研究。; 阅读建议:建议读者结合Simulink仿真模型深入理解控制结构与参数整定过程,重点关注ESO的观测性能与扰动补偿机制,并可通过改变负载条件、参数偏差等工况进行鲁棒性测试,进一步掌握该改进策略的核心优势与适用边界。

15,466

社区成员

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

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