VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 376|回复: 1

MFC如何调用dll内返回值是数组的函数

[复制链接]
17_avatar_middle
最佳答案
0 
在线会员 发表于 2022-4-15 09:32:11 | 显示全部楼层 |阅读模式
VC小白,请大神赐教。
dll有个函数:int[] OpenNetPort(int addr,int Port,String IPaddr);
如果该函数调用成功,返回一个数组,第一个字节表示函数执行结果,为0表示成功,返回非零值请查看其他返回值定义,返回的错误代码请查看错误代码定义,第2个字节表示读写器地址,第3个字节表示返回与读写器连接端口对应的句柄,应用程序通过该句柄可以操作连接在相应端口的读写器。如果打开不成功,返回的句柄值为-1。

我通过动态加载dll的方式调用这个函数,我该如何使用呢?如何分别获取数组内的各个代表不同意义的值?
目前使用的代码是这样:
        typedef int* (*OpenNetPort_FUNC)(int addr, int Port, CString IPaddr);
        HMODULE hModule = LoadLibrary(_T("C:\\Users\\晨晨的跟班\\Desktop\\cpp_test\\CallDll\\UHFReader18.dll"));
        if (hModule) {
                ::MessageBox(this->m_hWnd, _T("加载成功"), _T("提示"), MB_OK);
                OpenNetPort_FUNC OpenNetPort_fp = (OpenNetPort_FUNC)::GetProcAddress(hModule, "OpenNetPort");
                int FrmHandle = 0;
                if (OpenNetPort_fp) {
                        ::MessageBox(this->m_hWnd, _T("函数加载成功"), _T("提示"), MB_OK);
                        int* OpenRetp = new int[3];
                        ZeroMemory(OpenRetp, 3);
                        OpenRetp = OpenNetPort_fp(0xFF, 6000, _T("192.168.1.190"));//函数返回值是55
                       
                        delete[] OpenRetp;//这里会报错
                }
                FreeLibrary(hModule);
        }




上一篇:函数的默认参数的问题
下一篇:vc++窗口篇之windows发送消息
60_avatar_middle
最佳答案
4 
在线会员 发表于 2022-4-16 10:27:57 | 显示全部楼层
你的OpenNetPort_fp函数返回值赋值给OpenRetp的操作挺危险的,多加点越界和非法访问等安全检查判断条件吧,再不济try+catch一下抓一下windows给你的报错信息感受一下内存不能为write等等。C/C++就这点比较秀指针可以随便干,干坏内存了就GG。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2023-12-11 12:04

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表