谢谢各位..... 按照你们所说我加载了DLL运行到如下A处时提示所读内存出错!我仔细看了一下厂商提供的示例代码(VB)他是把zkemKeeper.dll以控件的方式加入,(通过coponent......方式找到注册的zkemKeeper.dll)然后就可以直接拖入对话框使用,我用MFC通过project----->add to project-->component and control..加入zkemKeeper.dll时系统提示所选文件为不可以识别component.. 怎么都加不进去,还请大家帮帮忙! HINSTANCE hit = LoadLibrary(TEXT("zkemKeeper.dll"));
if (hit) { connect1 = (pConnect_Net *)GetProcAddress(hit,"Connect_Net"); } int port = 4370; CString TMP = "172.16.2.201"; BSTR STR = TMP.AllocSysString(); BOOL flag1 = connect1(STR,port); //A
可以啊,MFC通过project----->add to project-->component and control加入后在控件栏就可以看到了。
MFC通过project----->add to project-->component and control加入后在控件栏就可以看到了。 我用这种方式加载时系统提示:the file you have selected is not a recognizable component 如果在DIALG对话框中点右键加入ACTIVE CONTROL可以加入控件图标但是这个控件没有相映事件!
你是不是没有调用 if (!AfxOleInit()) { return FALSE; }
AfxOleInit()请问楼上这是什么函数啊?
我用了AfxOleInit()函数一样没有用啊 Visual Studio 2005和VC++6.0是不是兼容的,我想改用Visual Studio 2005试下 结果不好用,连MESSAGEBOX()都弹不出来不会连语法都变了吧, 我在VC++6.0下编的程序在Visual Studio 2005中不能运行.....类向导好像也变了 那位知道Visual Studio 2005告诉我怎么入门吧!.....急啊谢过!
把你编写的 .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);
}
GetProcAddress
其他的楼上都说了!
按照你们所说我加载了DLL运行到如下A处时提示所读内存出错!我仔细看了一下厂商提供的示例代码(VB)他是把zkemKeeper.dll以控件的方式加入,(通过coponent......方式找到注册的zkemKeeper.dll)然后就可以直接拖入对话框使用,我用MFC通过project----->add to project-->component and control..加入zkemKeeper.dll时系统提示所选文件为不可以识别component..
怎么都加不进去,还请大家帮帮忙!
HINSTANCE hit = LoadLibrary(TEXT("zkemKeeper.dll"));
if (hit)
{
connect1 = (pConnect_Net *)GetProcAddress(hit,"Connect_Net");
}
int port = 4370;
CString TMP = "172.16.2.201";
BSTR STR = TMP.AllocSysString();
BOOL flag1 = connect1(STR,port); //A
if (flag1)
{
AfxMessageBox("ok!");
}
#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组件的连接点。
能把控件加载进去是不是可以说明这个.DLL文件支持VC++开发工具呢?
(希望大家帮帮忙,问题解决另开帖追加分!)
应该是说这个dll是ActiveX控件。很多语言都能使用他,vc当然不例外
再问一下ActiveX控件是不是不能在MFC控件栏中出现啊(为什么VB中可以呢,加入后在控件栏中可以找的到)!
我用这种方式加载时系统提示:the file you have selected is not a recognizable component
如果在DIALG对话框中点右键加入ACTIVE CONTROL可以加入控件图标但是这个控件没有相映事件!
if (!AfxOleInit())
{
return FALSE;
}
Visual Studio 2005和VC++6.0是不是兼容的,我想改用Visual Studio 2005试下
结果不好用,连MESSAGEBOX()都弹不出来不会连语法都变了吧,
我在VC++6.0下编的程序在Visual Studio 2005中不能运行.....类向导好像也变了
那位知道Visual Studio 2005告诉我怎么入门吧!.....急啊谢过!
第二步 HMODULE hModule = ::LoadLiabrary("..\\..\\..\\myDllDemo.dll");
if(hModule != NULL)
{
PFNEXPORTFUNC mExportFunc =(PFNEXPORTFUNC)::GetProcAddress(hModule,"myFounction");
if(mExportFunc != NULL)
{
mExportFunc(参数);
}
::FreeLibrary(hModule);
}这样没问题吧,开始也不需要把你的DLL导入工程中吧
要不再测试下厂商vb程序,仔细看下vb程序,应该跟vc差不多.
你转到2005干什么呢,不用CLR就不要换了,还不如直接用vb写,来的快.
两个类和相关的事件(与说明书相同)其中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文件的加载出了问题.....大家给点提示吧(啥条件尽管说)
都快一周了......头痛中!
感谢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()即可自如的调用接口
函数,没有用过易都亦难夷! 无私助人是一种高尚的品格! 谢过各位接分!
在窗体里加上控件,然后ctrl+w在成员变量页中双击你的控件ID号,自动会给你添加控件类,还有控件类的成员变量
dlg变量没有Connect_Net方法呀????