MFC中如何加载入动态链接库,然后调用里面的封装的函数(在线等.....立马给分)!

qeq2008 2007-04-09 11:21:51
如可在MFC中载入一个外设提供的.DLL库(控件),然后调用里面封装的函数.....请高手说的详细点....谢过!
...全文
1432 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
fqy2000 2008-04-16
  • 打赏
  • 举报
回复
我按你的步骤做了!怎么还是不行呀!
dlg变量没有Connect_Net方法呀????
sin6007 2007-04-14
  • 打赏
  • 举报
回复
vc6里其实是一样的.
在窗体里加上控件,然后ctrl+w在成员变量页中双击你的控件ID号,自动会给你添加控件类,还有控件类的成员变量
qeq2008 2007-04-13
  • 打赏
  • 举报
回复
问题终于在2007年4月13日13点29分搞定了!
感谢CSDN里各们高人的帮助.......谢谢.
现将解决过程简述如下,希望能给像我一样初学者带来一点帮助:

1.把所有的.DLL文件丢到SYSTEM32下.
2.通过运行regvr32 keeper.dll(一个activex控件)注册控件.
3.vs2003vc++下建一下基于DIALG的工程.
4.通过工程-->加入新类-->activex mfc类-->文件-->system32下找到
keeper.dll文件-->ok
5.在对话框中右键加入ACTIVEA控件找到keeper object加入(加入后是一个图标
有属性无事件).
6.鼠标放在图标处右键加入变量dlg(关键的一步).-->ok

到此整个过程结束,在你用到的地方能过dlg.function()即可自如的调用接口
函数,没有用过易都亦难夷!

无私助人是一种高尚的品格!

谢过各位接分!
qeq2008 2007-04-12
  • 打赏
  • 举报
回复
VB以前没怎么用过作起来不方便时间也不充许.....

我试了一下从类向导中以加入类的方式找到控件DLL文件加入到工程中,出现了
两个类和相关的事件(与说明书相同)其中Connect_Net(LPCTSTR IPAdd, long Port)
函数是一个用于连接设备的接口函数,我调用到我个函数跟踪到如下的函数体:
BOOL IZKEM::Connect_Net(LPCTSTR IPAdd, long Port)
{
BOOL result;
BYTE parms[] =VTS_BSTR VTS_I4;
//A
InvokeHelper(0x27, DISPATCH_METHOD, VT_BOOL, (BOOL*)&result, parms,IPAdd, Port);
return result;
}
A处函数没有起作用result值一直不变,连不连指纹机都没有变化.
应该还是DLL文件的加载出了问题.....大家给点提示吧(啥条件尽管说)
都快一周了......头痛中!
sin6007 2007-04-11
  • 打赏
  • 举报
回复
你是不是没有调用
if (!AfxOleInit())
{
return FALSE;
}
sin6007 2007-04-11
  • 打赏
  • 举报
回复
应该没什么问题了,怎么还不行呢.
要不再测试下厂商vb程序,仔细看下vb程序,应该跟vc差不多.
你转到2005干什么呢,不用CLR就不要换了,还不如直接用vb写,来的快.
robin_yao 2007-04-11
  • 打赏
  • 举报
回复
第一步 #pragma comment(lib,"链接库名称,如myDllDemo")
第二步 HMODULE hModule = ::LoadLiabrary("..\\..\\..\\myDllDemo.dll");
if(hModule != NULL)
{
PFNEXPORTFUNC mExportFunc =(PFNEXPORTFUNC)::GetProcAddress(hModule,"myFounction");
if(mExportFunc != NULL)
{
mExportFunc(参数);
}
::FreeLibrary(hModule);
}

这样没问题吧,开始也不需要把你的DLL导入工程中吧

猞猁狲 2007-04-11
  • 打赏
  • 举报
回复


============================
这个帖子的一问一答真是经典
让我从中学到了不少东西,关
注中,收藏此贴
============================
qeq2008 2007-04-11
  • 打赏
  • 举报
回复
我用了AfxOleInit()函数一样没有用啊
Visual Studio 2005和VC++6.0是不是兼容的,我想改用Visual Studio 2005试下
结果不好用,连MESSAGEBOX()都弹不出来不会连语法都变了吧,
我在VC++6.0下编的程序在Visual Studio 2005中不能运行.....类向导好像也变了
那位知道Visual Studio 2005告诉我怎么入门吧!.....急啊谢过!
qeq2008 2007-04-11
  • 打赏
  • 举报
回复
AfxOleInit()请问楼上这是什么函数啊?
qeq2008 2007-04-10
  • 打赏
  • 举报
回复
谢谢楼上.....按照你的说法我已经把DLL载入了对应的类和一些函数都可以使用了.
再问一下ActiveX控件是不是不能在MFC控件栏中出现啊(为什么VB中可以呢,加入后在控件栏中可以找的到)!
sin6007 2007-04-10
  • 打赏
  • 举报
回复
要生成控件类,你按ctrl+w 在classwizard里有个按钮AddClass 选择from a type library然后选择你的xxxx.dll就会出现控件类了。
应该是说这个dll是ActiveX控件。很多语言都能使用他,vc当然不例外
qeq2008 2007-04-10
  • 打赏
  • 举报
回复
按照楼上所说步骤.
类向导->添加新类->从类库
找到你的DLL文件,添加.
我已经成功的把类加入,现在奇怪的问题出现了我们这里的高手也搞不定:
我用下面的方式调用指纹机提供的接口函数Connect_Net()总是返回一个固定值:-858993460
既使不与指纹指相连也是如此!
IZKEM connet1;
BOOL FLAG1 = FALSE;
FLAG1 = connet1.Connect_Net("172.16.2.201",4370);
if (FLAG1)
{
connet1.PowerOffDevice(1);
connet1.SetDeviceTime(1);
AfxMessageBox("OK!");
}
几句话说不清楚,各位高手帮帮忙吧,留下你们的QQ,EMAIL,或是电话我可以把资料和文档说明发
给你帮我看下,搞定后....另开帖加50分!
qeq2008 2007-04-10
  • 打赏
  • 举报
回复
MFC通过project----->add to project-->component and control加入后在控件栏就可以看到了。
我用这种方式加载时系统提示:the file you have selected is not a recognizable component
如果在DIALG对话框中点右键加入ACTIVE CONTROL可以加入控件图标但是这个控件没有相映事件!
sin6007 2007-04-10
  • 打赏
  • 举报
回复
可以啊,MFC通过project----->add to project-->component and control加入后在控件栏就可以看到了。
拿节 2007-04-09
  • 打赏
  • 举报
回复
LoadLibrary
GetProcAddress
其他的楼上都说了!
minger909 2007-04-09
  • 打赏
  • 举报
回复
1.装载期间动态链接调用
把你编写的 .dll .lib 和 .h 文件加入工程
在本工程头文件中加入 #pragma comment(lib,"链接库名称,如myDllDemo")
这样你的程序就可以像调用本地函数一样调用Dll中的函数。

2.运行期间动态链接
在Dll工程中加入一个。Def文件 在其中加入要导出的函数名,如:
EXPORTS
myFounction
回到本工程,调用方法:
HMODULE hModule = ::LoadLiabrary("..\\..\\..\\myDllDemo.dll");
if(hModule != NULL)
{
PFNEXPORTFUNC mExportFunc =(PFNEXPORTFUNC)::GetProcAddress(hModule,"myFounction");
if(mExportFunc != NULL)
{
mExportFunc(参数);
}
::FreeLibrary(hModule);
}
ouyh12345 2007-04-09
  • 打赏
  • 举报
回复
LoadLibrary
GetProcAddress
qeq2008 2007-04-09
  • 打赏
  • 举报
回复
我注册了控件之后,然后在资源编辑器里,右击一dialog,选Insert Activx Components,找出控件,加载成功,担是ClassWizard没有替控件生成类,这个控件是一个空的没有事件(在VB中加载是正常的有事件)不知道哪里出了问题.........
能把控件加载进去是不是可以说明这个.DLL文件支持VC++开发工具呢?
(希望大家帮帮忙,问题解决另开帖追加分!)
sin6007 2007-04-09
  • 打赏
  • 举报
回复
MFC中你那样加入的是ActiveX控件。厂商提供的可能是简单Com组件,这样的话用vb就比较简单,用vc的话,你就要添加代码引用
#import "XXXXX.dll" no_namespace named_guids raw_interfaces_only
编译后会出现XXXXX.dll的接口文件比如说 ISample接口
你定义一个这个接口变量。
ISamplePtr m_Com;
m_Com.CreateInstance(_T("XXXXXX.类名.1"));
这就可以用m_Com.调用接口提供的函数。
如果有事件的话就比较麻烦,你要连接Com组件的连接点。


加载更多回复(2)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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