VC 调用 DLL问题

zbk502 2008-02-03 10:29:54
我有一DLL连接库,在VB里是这样调用的
Public Declare Function PortOpen Lib "BC245G.dll" (ByVal Port As Long) As Long
Dim ret As Integer
ret = PortOpen(edtCommport.Text)
If ret <> 1 Then
Label1.Caption = "打开串口失败"
Else
Label1.Caption = "打开串口成功"
End If
VB里调用没问题
然后我在VC里这样调用
HINSTANCE hModule = LoadLibrary("BC245G.dll");
if(hModule)
{
typedef long int (__stdcall *PortOpen) (long int);
PortOpen Open = (PortOpen)::GetProcAddress(hModule, "PortOpen");
if(Open)
{
CString str;
str.Format("%d",m_port);
str="没有发现COM"+str+"或被占用";
m_bSerialPortOpened[m_port-1]=true;
if(Open(m_port)!=1)
{
m_bSerialPortOpened[m_port-1]=false;
AfxMessageBox(str);
}
}
FreeLibrary(hModule);
hModule = NULL;
}
else AfxMessageBox("dll文件未找到!");
这是一个打开串口的程序,其中if(Open(m_port)!=1) 返回值是1,代表是成功的,但是实际上想打开的串口并没有打开,可为什么返回值还是正确的呢?请各位高手帮忙帮忙!
...全文
90 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
内存泄漏 2008-02-03
  • 打赏
  • 举报
回复
换其它电脑试试..
内存泄漏 2008-02-03
  • 打赏
  • 举报
回复
你这DLL是普通的DLL还是COM?? 只有COM才能#import "E:\XXX.dll"
zbk502 2008-02-03
  • 打赏
  • 举报
回复
我想用#import "E:\XXX.dll" 加载,可提示加载失败
内存泄漏 2008-02-03
  • 打赏
  • 举报
回复
是不是有什么初始化的操作在VC中没有做??
zbk502 2008-02-03
  • 打赏
  • 举报
回复
这个DLL是 delphi 语言写的
zbk502 2008-02-03
  • 打赏
  • 举报
回复
有关闭,我说的反过来做确可以再打开,意识是 返回值是对的,但是实际上串口并没真正的打开
内存泄漏 2008-02-03
  • 打赏
  • 举报
回复
是不是端口打开后没有关闭或进行其它资源释放操作??
zbk502 2008-02-03
  • 打赏
  • 举报
回复
跟电脑有关系吗?
有这样的情况,比如我先用VB打开COM1,再用上面的VC代码打开COM1就会提示打开失败!但若是反过来做,确可以再打开

15,471

社区成员

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

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