VB.NET动态调用某个DLL中的函数 [问题点数:100分,结帖人spark_li]

Bbs2
本版专家分:120
结帖率 99.4%
Bbs12
本版专家分:468514
Blank
进士 2018年总版新获得的技术专家分排名前十
2017年 总版技术专家分年内排行榜第十
2013年 总版技术专家分年内排行榜第八
Blank
铜牌 2018年12月 总版技术专家分月排行榜第三
2018年11月 总版技术专家分月排行榜第三
2017年2月 总版技术专家分月排行榜第三
Blank
红花 2019年1月 .NET技术大版内专家分月排行榜第一
2018年12月 .NET技术大版内专家分月排行榜第一
2018年11月 .NET技术大版内专家分月排行榜第一
2018年10月 .NET技术大版内专家分月排行榜第一
2018年9月 .NET技术大版内专家分月排行榜第一
2018年7月 .NET技术大版内专家分月排行榜第一
2018年6月 .NET技术大版内专家分月排行榜第一
2018年1月 .NET技术大版内专家分月排行榜第一
2017年5月 .NET技术大版内专家分月排行榜第一
2017年4月 .NET技术大版内专家分月排行榜第一
2017年3月 .NET技术大版内专家分月排行榜第一
2017年2月 .NET技术大版内专家分月排行榜第一
2016年10月 .NET技术大版内专家分月排行榜第一
2016年8月 .NET技术大版内专家分月排行榜第一
2016年7月 .NET技术大版内专家分月排行榜第一
Blank
黄花 2019年4月 .NET技术大版内专家分月排行榜第二
2019年3月 .NET技术大版内专家分月排行榜第二
2018年8月 .NET技术大版内专家分月排行榜第二
2018年4月 .NET技术大版内专家分月排行榜第二
2018年3月 .NET技术大版内专家分月排行榜第二
2017年12月 .NET技术大版内专家分月排行榜第二
2017年9月 .NET技术大版内专家分月排行榜第二
2017年7月 .NET技术大版内专家分月排行榜第二
2017年6月 .NET技术大版内专家分月排行榜第二
2016年12月 .NET技术大版内专家分月排行榜第二
2016年9月 .NET技术大版内专家分月排行榜第二
2016年6月 .NET技术大版内专家分月排行榜第二
2016年3月 .NET技术大版内专家分月排行榜第二
2016年1月 .NET技术大版内专家分月排行榜第二
2015年12月 .NET技术大版内专家分月排行榜第二
2015年2月 .NET技术大版内专家分月排行榜第二
2015年1月 .NET技术大版内专家分月排行榜第二
2014年11月 .NET技术大版内专家分月排行榜第二
2014年5月 .NET技术大版内专家分月排行榜第二
2014年4月 .NET技术大版内专家分月排行榜第二
2012年2月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二
Bbs12
本版专家分:468514
Blank
进士 2018年总版新获得的技术专家分排名前十
2017年 总版技术专家分年内排行榜第十
2013年 总版技术专家分年内排行榜第八
Blank
铜牌 2018年12月 总版技术专家分月排行榜第三
2018年11月 总版技术专家分月排行榜第三
2017年2月 总版技术专家分月排行榜第三
Blank
红花 2019年1月 .NET技术大版内专家分月排行榜第一
2018年12月 .NET技术大版内专家分月排行榜第一
2018年11月 .NET技术大版内专家分月排行榜第一
2018年10月 .NET技术大版内专家分月排行榜第一
2018年9月 .NET技术大版内专家分月排行榜第一
2018年7月 .NET技术大版内专家分月排行榜第一
2018年6月 .NET技术大版内专家分月排行榜第一
2018年1月 .NET技术大版内专家分月排行榜第一
2017年5月 .NET技术大版内专家分月排行榜第一
2017年4月 .NET技术大版内专家分月排行榜第一
2017年3月 .NET技术大版内专家分月排行榜第一
2017年2月 .NET技术大版内专家分月排行榜第一
2016年10月 .NET技术大版内专家分月排行榜第一
2016年8月 .NET技术大版内专家分月排行榜第一
2016年7月 .NET技术大版内专家分月排行榜第一
Blank
黄花 2019年4月 .NET技术大版内专家分月排行榜第二
2019年3月 .NET技术大版内专家分月排行榜第二
2018年8月 .NET技术大版内专家分月排行榜第二
2018年4月 .NET技术大版内专家分月排行榜第二
2018年3月 .NET技术大版内专家分月排行榜第二
2017年12月 .NET技术大版内专家分月排行榜第二
2017年9月 .NET技术大版内专家分月排行榜第二
2017年7月 .NET技术大版内专家分月排行榜第二
2017年6月 .NET技术大版内专家分月排行榜第二
2016年12月 .NET技术大版内专家分月排行榜第二
2016年9月 .NET技术大版内专家分月排行榜第二
2016年6月 .NET技术大版内专家分月排行榜第二
2016年3月 .NET技术大版内专家分月排行榜第二
2016年1月 .NET技术大版内专家分月排行榜第二
2015年12月 .NET技术大版内专家分月排行榜第二
2015年2月 .NET技术大版内专家分月排行榜第二
2015年1月 .NET技术大版内专家分月排行榜第二
2014年11月 .NET技术大版内专家分月排行榜第二
2014年5月 .NET技术大版内专家分月排行榜第二
2014年4月 .NET技术大版内专家分月排行榜第二
2012年2月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二
Bbs5
本版专家分:2399
Bbs9
本版专家分:52172
Blank
黄花 2016年4月 .NET技术大版内专家分月排行榜第二
2016年2月 .NET技术大版内专家分月排行榜第二
Blank
蓝花 2017年3月 .NET技术大版内专家分月排行榜第三
2017年2月 .NET技术大版内专家分月排行榜第三
2016年9月 .NET技术大版内专家分月排行榜第三
2016年8月 .NET技术大版内专家分月排行榜第三
2016年7月 .NET技术大版内专家分月排行榜第三
2016年3月 .NET技术大版内专家分月排行榜第三
2016年1月 .NET技术大版内专家分月排行榜第三
2015年12月 .NET技术大版内专家分月排行榜第三
2015年11月 .NET技术大版内专家分月排行榜第三
Bbs10
本版专家分:139102
Blank
进士 2010年 总版技术专家分年内排行榜第五
Blank
银牌 2010年11月 总版技术专家分月排行榜第二
2010年9月 总版技术专家分月排行榜第二
2010年8月 总版技术专家分月排行榜第二
Blank
铜牌 2010年7月 总版技术专家分月排行榜第三
Blank
微软MVP 2012年1月 荣获微软MVP称号
2011年1月 荣获微软MVP称号
Bbs4
本版专家分:1670
Bbs5
本版专家分:4569
DLL中动态调用DLL
我写了一个DLL,其中需要调用别人写的DLL,采用的是<em>动态调用</em>的方法,在调试过程中,我的DLL被静态调用,在<em>动态调用</em>别人的DLL时,LoadLibrary调用没有出错,但是读取其中的<em>函数</em>时出了错,得到的<em>函数</em>指针为NULL,请问大家这是为什么?
如何动态调用第三方的标准dll中的函数
如何<em>动态调用</em>第三方的标准<em>dll</em>中的<em>函数</em>rnScript控件可以<em>动态调用</em>Com <em>dll</em> 不知道有什么方法可以动态调c++的标准<em>dll</em>rnrn这个<em>dll</em>的名称以及<em>函数</em>名我都是未知的,需要动态加载rnrn比如我在一个窗口的一个文本框中写入rnrndeclare funa......rncall funa(1,2,3)rnrn点击一个执行按钮可以执行这段代码从我写入的地方加载<em>函数</em>。rnrn
关于动态调用dll函数的问题
各位大吓:rnUSEUNIT("<em>dll</em>Unit.cpp");rnUSEFORM("..\e\test.cpp", w_main);rnUSEFORM("..\e\loginfrm.cpp", w_login);rnUSELIB("D:\bcb\CBuilder5\Lib\PSDK\odbc32.lib");rn<em>函数</em>如下:如果把<em>函数</em>体换成ShowMessage等之类的可以正常运行,但若要创建一个窗体就会出错!这是怎么回事呀?rnbool __stdcall showwindow()rnrn w_main=new Tw_main(NULL);rn w_main->Caption="数据库工具";rn if(w_main->ShowModal()==ID_OK)rn rn delete w_main;rn return true;rn rn delete w_main ;rn return false;rnrn
DLL中动态调用char FAR *类型的函数
要在DLL 中调用ws2_32.<em>dll</em>中的 inet_ntoa<em>函数</em>rnrn具体定义:rnchar FAR * inet_ntoa( struct in_addr in );rn请问我这样写对不对?rnrntypedef char FAR *(_stdcall * Procinet_ntoa)(struct in_addr);rnProcinet_ntoa inet_ntoa=(Procinet_ntoa)GetProcAddress(hinstLib,"inet_ntoa");rnrn
如何动态调用dll中的类的函数:OpenSCManager
原句:SC_HANDLE hSCManager = OpenSCManager( NULL, NULL,SC_MANAGER_CREATE_SERVICE );rnrn我想吧 OpenSCManager这个<em>函数</em><em>动态调用</em>,我写成:rnrnHINSTANCE h<em>dll</em>de; rn typedef SC_HANDLE (LPCTSTR lpMachineName,LPCTSTR lpDatabaseName,DWORD dwDesiredAccess); rn //OPENSCM myOpenScm; rn h<em>dll</em>de = LoadLibrary("Advapi32.<em>dll</em>"); rn myOpenScm = GetProcAddress(h<em>dll</em>de,"OpenSCManager"); rn SC_HANDLE hSCManager= myOpenScm(NULL, NULL,SC_MANAGER_CREATE_SERVICE ); rn FreeLibrary(h<em>dll</em>de);rnrnrnrnrnrn编译倒是没出错,也没warning,但是程序却不能运行了,为何呢??
如何动态调用dll中的类的函数
My<em>dll</em>.<em>dll</em>头文件定义一个类:rnrnclass __declspec(<em>dll</em>export) MyClassrn public:rn MyClass(HWND hwnd);rn void SaySomething(char* text);rn private:rn HWND hWnd;rn;rn//---------------------------------------------------------------------------rnrnSaySomething是在MyClass里的成员<em>函数</em>rn//---------------------------------------------------------------------------rnvoid MyClass::SaySomething(char* text)rnrn MessageBox(hWnd,text,"A TEXT Message From a DLL CLASS",MB_OK);rnrn//---------------------------------------------------------------------------rnrn请问如何<em>动态调用</em>SaySomethingrnrn
动态调用DLL里的函数-16.09.21
模拟DynamicWrapper,使用汇编语言<em>动态调用</em>DLL里的<em>函数</em>
C函数的DLL,C++动态调用
1、项目结构 2、建立c项目,其实很简单,只要源文件是.c的即可。 CDLL.h头文件#ifndef __CDLL_H__ #define __CDLL_H__ extern int _declspec(<em>dll</em>export) foo(int x, int y); #endifCDLL.c文件#include "CDLL.h" int foo(int x, int y) { return
动态调用DLL函数,程序自动关闭。
我用VC封装人家VC写的DLL<em>函数</em>,使用LoadLibrary方式来调用,可是当我实际调用人家的<em>函数</em>时,程序会自动关闭,如果我在调用人家<em>函数</em>的前一句加上AfxMessageBox("1");则<em>函数</em>调用正常。这个是什么原因呢?
动态调用DLL函数总是失败
//************mymath.h********************************rn#ifndef _MATH_H_rn#define _MATH_H_rnrn#ifdef __cplusplusrn#define EXPORT extern "C" __declspec(<em>dll</em>export)rn#elsern#define EXPORT __declspec(<em>dll</em>export)rn#endifrnrn#define DLLENTRY WINAPIrnrnEXPORT int CALLBACK sub(int,int);rnEXPORT int CALLBACK add(int,int);rnEXPORT int CALLBACK mut(int,int);rnrnrn#endifrnrn//****************mymath.cpp**********************************rn#includern#include"math.h"rnrnint DLLENTRY DllMain(HINSTANCE hInstance,DWORD fdwReason,PVOID pvReserved)rnrn return TRUE;rnrnrnEXPORT int CALLBACK sub(int x,int y)rnrn return x-y;rnrnrnEXPORT int CALLBACK add(int x,int y)rnrn return x+y;rnrnrnEXPORT int CALLBACK mut(int x,int y)rnrn return x*y;rnrnrnrn//**************main.cpp*******************************************rn#include "windows.h"rnrntypedef int ( CALLBACK * PFUN)(int,int);rnrnint APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)rnrn rn HINSTANCE hDll;rn PFUN psub;rnrn hDll=LoadLibrary("mymath.<em>dll</em>");rnrn //测试加载mymath.<em>dll</em>是否成功rn if(hDll==NULL)rn rn MessageBox(NULL,TEXT("Fail to load math.<em>dll</em> "),TEXT("ERROR"),MB_OK|MB_ICONWARNING);rn return 0;rn rn rn psub=PFUN(GetProcAddress(hDll,"sub"));rnrn  //测试取得<em>函数</em>sub地址是否成功(总是在这儿失败)rn if(psub==NULL)rn rn MessageBox(NULL,TEXT("Fail to load function sub "),TEXT("ERROR"),MB_OK|MB_ICONWARNING);rn return 0;rn rnrn rn return 0;rnrnrn上面程序中,psub总是等于NULL,为什么不能成功调用<em>函数</em>sub?rnrnrn
请问如果动态调用DLL函数
Windows2000的User32.<em>dll</em>中有设置窗体透明的<em>函数</em>,但Win98没有,我想先检测操作系统类型,再决定是否可使用该<em>函数</em>。rn但如果要使用,必须先定义API,但定义了API在Win98下又会出错(无入口点),怎样可以实现动态定义我所需要的DLL中的<em>函数</em>呢?
c#动态调用带参数的DLL函数
DLL:rnnamespace MODBUSCommunicationProtocolrnrn public class MODBUSCommunicationProtocolrn rn public string GetHexValue(string hexString, string type, int lenght)rn ... rn public string GetMODBUSString(string hexString, string type)rn ... rn }rn}rnrn主程序调:rnAssembly ass = Assembly.LoadFrom("*.DLL"); rnType type = ass.GetType("MODBUSCommunicationProtocol.MODBUSCommunicationProtocol"); rnObject obj = Activator.CreateInstance(type); rnSystem.Reflection.MethodInfo gtMString = type.GetMethod("GetMODBUSString"); System.Reflection.MethodInfo gtHValue = type.GetMethod("GetHexValue");rnrnsNData = (string)gtMString.Invoke(obj, new string[] "aa","aa" );//(调用成功没有任何问题--参数都是字符型的)rnsNData = (string)gtHValue.Invoke(obj, new object[] (string)sNData,(string)sTPY,(Int32)sBYT );rn//这个就有问题,参数的类型不一样,我应该怎么写?调高手指导一下。
VB.net调用dll中的函数
在VB6.0中成功调用了一个<em>dll</em>,但是现在要写成VB.net,该如何写呢rnVB6.0中的代码:rnDim RootObj As RTXSAPIRootObj '声明一个根对象rnRootObj.ServerIP = "127.0.0.1" '设置服务器IPrnRootObj.ServerPort = "8006" ' 设置服务器端口,默认为8006rnRootObj.SendNotify "kylieye;andyzheng", "ceshi", 0, "It's OK!" rnrn在VB.Net中添加了引用后,该如何声明RootObj对象以及调用SendNotify<em>函数</em>呢???麻烦各位说详细点,多谢!
动态调用dll, dll回调主程序函数 - 新问题
上次的问题:主程序<em>动态调用</em><em>dll</em>, <em>dll</em>回调主程序<em>函数</em>,经shingoscar老师的大力帮助,已顺利解决。rnrn现在延续上次的问题,有一个新问题如下:rn假设在<em>dll</em>中有2个类分别为Class1和Class2. 请参见下列主程序和<em>dll</em>代码:rnrn主程序代码:rn[code=vb]Private Sub CallBackMethod(ByVal enable As Boolean)rn MsgBox("Enabled = " & enable.ToString())rnEnd Subrn rnSub LoadProgram()rn Dim SpaceClass As Object = "DllFile.Class1" rn Dim A As Assembly = Assembly.LoadFrom("D:\DemoCallBack\DllFile.<em>dll</em>") rn Dim T As Type = A.GetType(SpaceClass) rnrn Dim TypeCallBack = T.GetNestedType("CallBack")rn Dim MethodCallBack = Me.GetType().GetMethod("CallBackMethod", BindingFlags.NonPublic Or BindingFlags.Instance)rn Dim DelCallBack = [Delegate].CreateDelegate(TypeCallBack, Me, MethodCallBack)rn Dim p() As Object = DelCallBackrn Dim Obj As Object = Activator.CreateInstance(T, p)rnrn Obj.Demo1()rn ......rnEnd Subrn[/code]rn<em>dll</em>代码:rn[code=vb]Public Class Class1rn Public Delegate Sub CallBack(ByVal enable As Boolean)rn Private ConstructorPassedCallBack As CallBack rn rn Public Sub New(ByVal CallBack As CallBack)rn Me.ConstructorPassedCallBack = CallBackrn End Subrn rn Public Sub Demo1()rn Dim ObjTry2 As New Class2 rn ObjTry2.Demo2()rn End Subrn rn Public Sub Demo3()rn ......rn End SubrnEnd Classrnrn'=====================rnrnPublic Class Class2rn rn Public Sub Demo2()rn Dim ObjTry1 As New Class1rn ObjTry1.Demo3()rn End Subrn rnEnd Classrn[/code]rn现在主程序调用<em>dll</em> Class1中的子程序Demo1(), 然后在Demo1()中调用Class2中的子程序Demo2() , 这2步都没有问题。接下来我希望在Class2中的子程序Demo2() 中调用 Class1中的子程序Demo3(), 问题来了:rnrn在Class2 - Demo2()中的指令 Dim ObjTry1 As New Class1提示有错:rn没有为“Public Sub New(CallBack As Class1.CallBack)”的形参“CallBack”指定实参rnrn本人是新手,不知如何解决此问题,求老师指点,万分感谢!rnrn
动态调用dll, dll回调主程序函数
我使用VB.net 2010编程。最近在试验<em>dll</em>回调主程序<em>函数</em>。rn主程序静态调用<em>dll</em>, 然后<em>dll</em>回调主程序的<em>函数</em>, 这个已经试验成功。rnrn现在主程序<em>动态调用</em><em>dll</em>,然后<em>dll</em>回调主程序的<em>函数</em>,出现了问题,主程序在运行到rnDim Obj As Object = Activator.CreateInstance(T) 时出错显示 :没有为该对象定义无参数的构造<em>函数</em> ......rn估计和<em>dll</em>中的Sub New(...)有关。本人是新手,求各位老师指点迷津,不胜感谢!rnrn1.0 主程序代码如下:rn[code=vb]Private Sub CallBackMethod(ByVal enable As Boolean)rn MsgBox("Enabled = " & enable.ToString())rnEnd SubrnrnSub LoadProgram()rn Dim SpaceClass As Object = "DllFile.Class1" rn Dim A As Assembly = Assembly.LoadFrom("D:\DemoCallBack\DllFile.<em>dll</em>") rn Dim T As Type = A.GetType(SpaceClass) rn Dim Obj As Object = Activator.CreateInstance(T) rn rn 'Dim test As New DllFile.Class1(AddressOf CallBackMethod) '静态方式调用<em>dll</em>rn 'test.CallTheCallBack()rn ......rnEnd Subrn[/code]rn2.0 <em>dll</em>代码如下:rn[code=vb]Public Class Class1rnrn Public Delegate Sub CallBack(ByVal enable As Boolean)rn Private ConstructorPassedCallBack As CallBack rnrn Public Sub New(ByVal CallBack As CallBack)rn Me.ConstructorPassedCallBack = CallBackrn End Subrnrn Public Sub CallTheCallBack()rn If ConstructorPassedCallBack IsNot Nothing Then ConstructorPassedCallBack(True)rn End SubrnrnEnd Classrn[/code]rn
怎样用vb.net动态调用本地的dll文件?
我用<em>vb.net</em>中的类库生成一个test.<em>dll</em>文件,我怎样才可以<em>动态调用</em>它?rn可以给出个例子吗?谢谢!
VB.NET如何动态调用非托管的DLL文件
有一个第三方的<em>dll</em>文件FileCompress.<em>dll</em>,提供者提供了如下信息rn里面有一个<em>函数</em>rnint FileDecompressToStrEx(char *szFile, char *pOutBuffer, int *pOutBufferSize);rnrn参数rn szFile : 要解压缩的文件路径、名称;rn pOutBuffer : 接收输出解压数据的内存指针;rn pOutBufferSize: 整数指针,指向的值为这块输出内存的大小。rnrn返回值rn 0 <em>函数</em>调用成功;rn -0x1 失败,错误未知;rn -0x2 失败,输出内存块太小,不足以接收全部解压内容rnrn现在问题是如何在<em>vb.net</em>里面调用他,网上一大堆答案都不能解决
DLL动态调用
HINSTANCE PcommDLL = NULL;rnbool LoadPcommDll()rnrn tryrn rn PcommDLL=LoadLibrary("Pcomm.<em>dll</em>");rn if(PcommDLL)rn rn //LED_Open =(long(WINAPI *)(TDeviceParam*,long,long,long))GetProcAddress(LEDDLL,"LED_Open");rn sio_ioctl=(int (WINAPI *)(int port, int baud, int mode))GetProcAddress(PcommDLL,"sio_ioctl");rn sio_getch=(int (WINAPI *)(int port))GetProcAddress(PcommDLL,"sio_getch");rn sio_read=(int (WINAPI *)(int port, char *buf, int len))GetProcAddress(PcommDLL,"sio_read");rn sio_putch=(int (WINAPI *)(int port, int term))GetProcAddress(PcommDLL,"sio_putch");rn sio_write=(int (WINAPI *)(int port, char *buf, int len))GetProcAddress(PcommDLL,"sio_write");rn sio_flush=(int (WINAPI *)(int port, int func))GetProcAddress(PcommDLL,"sio_flush");rn sio_iqueue=(long (WINAPI *)(int port))GetProcAddress(PcommDLL,"sio_iqueue");rn sio_oqueue=(long (WINAPI *)(int port))GetProcAddress(PcommDLL,"sio_oqueue");rn sio_lstatus=(int (WINAPI *)(int port))GetProcAddress(PcommDLL,"sio_lstatus");rn sio_lctrl=(int (WINAPI *)(int port, int mode))GetProcAddress(PcommDLL,"sio_lctrl");rn sio_cnt_irq=(int (WINAPI *)(int port, VOID (CALLBACK *func)(int port), int count))GetProcAddress(PcommDLL,"sio_cnt_irq");rn sio_modem_irq=(int (WINAPI *)(int port, VOID (CALLBACK *func)(int port)))GetProcAddress(PcommDLL,"sio_modem_irq");rn sio_break_irq=(int (WINAPI *)(int port, VOID (CALLBACK *func)(int port)))GetProcAddress(PcommDLL,"sio_break_irq");rn sio_Tx_empty_irq=(int (WINAPI *)(int port, VOID (CALLBACK *func)(int port)))GetProcAddress(PcommDLL,"sio_Tx_empty_irq");rn sio_break=(int (WINAPI *)(int port, int time))GetProcAddress(PcommDLL,"sio_break");rn sio_break_ex=(int (WINAPI *)(int port, int time))GetProcAddress(PcommDLL,"sio_break_ex");rn sio_flowctrl=(int (WINAPI *)(int port, int mode))GetProcAddress(PcommDLL,"sio_flowctrl");rn sio_Tx_hold=(int (WINAPI *)(int port))GetProcAddress(PcommDLL,"sio_Tx_hold");rn sio_close=(int (WINAPI *)(int port))GetProcAddress(PcommDLL,"sio_close");rn sio_open=(int (WINAPI *)(int port))GetProcAddress(PcommDLL,"sio_open");rn return true;rn rn elsern return false;rn rn catch(...)rn rn //rn rnrnrnrn上面的<em>函数</em>无论是不是成功加载PCOMM.DLL,<em>函数</em>都返回truern就是把PCOMM文件删除了,还是返回TRUE?rn为什么这样啊?rn
动态调用dll
写了一个读卡的程序,厂商提供了一个<em>dll</em>,和一个接口过程.但是照搬上去不行,查其原因可能是调用<em>dll</em>的方式是静态调用的,查了一些<em>动态调用</em>的资料,但是还是没有解决问题,以前没有接触过<em>dll</em>.希望高手指教.目前错误的形势是:不开读卡机(即不联机)运行程序就报错.如果打开机器再运行程序就不会报错,所以我想换为动态的调用应该不会出错了.rn以下是代码:rnfunction OmrS(Cmd:Pchar):Integer;stdcall;external'A50COM.DLL';rnfunction OmrG(Buf:PChar):Integer;stdcall;external'A50COM.DLL';rn调用的时候的代码rnprocedure TFrmmzcp.dxBarButton2Click(Sender: TObject);rnvarrn Cmd:array[0..254] of char;rn Buf:array[0..254] of char;rn sp: array[0..199] of char;rnbeginrnCmd:='S A50Com.DLL/'; //FOMFILE.FOM为发送格式文件名rn OmrS(cmd); rn OmrG(Buf);rn If copy(buf,1,2)='08' then exit ; //阅卷机未联机,返回rn Memo1.lines.clear;rn while true dornbeginrn FillChar(sp, 200, Ord(' '));rn Cmd:= '/ ';rn OmrS(Cmd); //送读卡命令'/'+' 'rn OmrG(Buf); //取读卡返回字串rn if Copy(Buf,1,2)='OK' thenrn beginrn Edit1.Text:='OK';rn strpcopy(Cmd,'001'+sp+'/');rn OmrS(Cmd); //送取数据命令rn OmrG(Buf); //取返回字串rn memo1.lines.add(Copy(Buf,1,200));rn rn//-----------如果使用双头机使用下列操作取双头机B头数据---------rn //strpcopy(Cmd,' 001'+sp+'/');rn //OmrS(Cmd); //送B头取数据命令rn //OmrG(Buf); //取B头返回字串rn //memo2.lines.add(Copy(Buf,1,200)); //显示B头返回字串rn //-------------------------------------------------------------rn endrn elsern beginrn Cmd:='-/';rn OmrS(Cmd); //送停机命令rn Edit1.Text:=Copy(Buf,1,2); //显示错误代码rn break;rn end;rnend;rn end; rnrn
DLL动态调用!
DLL内部有三个<em>函数</em>rnFunctionArnFunctionBrnFunctionCrnrn现要<em>动态调用</em>DLLrn必须先调用FunctionA返回的值作为FunctionB的参数rnFunctionB的返回值作FunctionC的返回值!rnrn怎么<em>动态调用</em>?rn
dll动态调用
用delphi产生的:project1.<em>dll</em>rnrnfunction jia(a,b:integer):integer;stdcallrnbeginrnresult:=a+b;rnend;rnexportsrnjia;rnrn新建一个formrnrnvarrn OneHandle : THandle;rnbeginrn  OneHandle := LoadLibrary('e:\project1.<em>dll</em>');rn tryrn   if OneHandle <> 0 then rn    @jia := GetProcAddress(OneHandle, 'jia');rn   if not (@jia = nil) thenrn    showmessage(inttostr(jia(3,4)));    rnfinallyrn   FreeLibrary(OneHandle); rn end;rnrn编译时,提示jia没有定义,怎么回事,谢谢rnrn rnrn
dll 动态调用
HINSTANCE hDllInst = LoadLibrary("averc727api.<em>dll</em>");rn if( hDllInst)rn rn //LONG WINAPI AVerCreateCaptureObject(DWORD dwDeviceIndex, HWND hWnd, HANDLE* CaptureObject)rnrn typedef LONG (WINAPI *MYFUNC_Object)(DWORD, HWND, HANDLE);rn MYFUNC_Object GetVideoSourceHwnd = NULL; rn GetVideoSourceHwnd = (MYFUNC_Object)GetProcAddress(hDllInst,"AVerCreateCaptureObject");rn if(GetVideoSourceHwnd &&(0==state))rn rn state = GetVideoSourceHwnd(0, hd_std, &hdCapture_std);rn rnrn if( GetVideoSourceHwnd &&(0==state))rn rn state = GetVideoSourceHwnd(1, hd_tec, &hdCapture_tec);rn rnrn //LONG WINAPI AVerSetVideoSource(HANDLE hCaptureObject, DWORD dwVideoSource)rn typedef LONG (WINAPI *MYFUNC_Set)(HANDLE, DWORD);rn MYFUNC_Set SetVideoSource = NULL; rn SetVideoSource = (MYFUNC_Set)GetProcAddress(hDllInst,"AVerSetVideoSource");rn if(SetVideoSource &&(0==state))rn rn state = SetVideoSource(hdCapture_std, VIDEOSOURCE_SVIDEO);rn rnrn if( SetVideoSource &&(0==state))rn rn state = SetVideoSource(hdCapture_tec, VIDEOSOURCE_SVIDEO);rn rn rnrn FreeLibrary(hDllInst);rnrn编译没问题,但是功能实现不了。各位大侠帮我看看是不是<em>dll</em>的调用有什么问题。谢谢!
动态调用Dll
我想<em>动态调用</em>DLL,声明了这两个类型,但编译时总提示<em>函数</em>需要返回值。为什么啊?rn我看别的例子都是这样用的啊rnType TStrEncrypt = function StrEncrypt(const sInput: string): string; stdcall;rnType TStrDecrypt = function StrDecrypt(const sInput: string): string; stdcall;
DLL 动态调用
DLL.h#ifdef DLL_EXPORTS #define DLL_API __declspec(<em>dll</em>export) #else #define DLL_API __declspec(<em>dll</em>import) #endif #include &amp;lt;map&amp;gt; #include &amp;lt;vector&amp;gt; #include &amp;lt;string&amp;gt; using namespace s...
动态调用DLL中的方法案例
利用 反射功能实现 <em>动态调用</em> DLL中的方法 及属性 字段等信息; 本例实现 动态查看 DLL中的所有类及类中的方法及参数
PB中如何动态调用DLL
RTrn由于需要,所以必须要用LoadLibrary、GetProcAddress、FreeLibrary来操作rn静态声明API的方法请勿回帖!
vb中如何动态调用Dll?
另外:是delhpi写的<em>dll</em>.rn有没有例子下载看看?
如何动态调用DLL中的类!
现有一个DLL库,没有头文件,我想<em>动态调用</em>DLL中的类,请问我该怎么办。最好能给个示例。高分相送!谢谢。
Delphi中动态调用DLL的方法
Delphi中<em>动态调用</em><em>dll</em>的方法如下: function CallFunc(<em>dll</em>name, funcname: string; const param: array of const): DWORD; var hLib: THandle; pFunc: Pointer; intSize: Integer; begin Result := 0; hLib :=
VB中如何动态调用DLL
我现在需要动态调动一些未知的DLL,rnrnPrivate Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As LongrnPrivate Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As LongrnPrivate Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As LongrnPrivate Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal Hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Longrn rnPrivate Sub command1_click()rn Dim DllHand As Longrn Dim DllProc As Longrn rn '加载DLL文件rn DllHand = LoadLibrary("C:\WINNT\system32\w_kqrec.<em>dll</em>")rn If DllHand = 0 Then MsgBox "没法加载DLL"rn '找到DLL指定<em>函数</em>的入口地址rn DllProc = GetProcAddress(DllHand, "_LANDOWNLOAD")rn If DllProc = 0 Then MsgBox "没找到此<em>函数</em>"rn rnrn rn rn CallWindowProc DllProc, DllHand, 0, 0, 0rn '执行完一定要释放,无论如何要释放,否则可能造成系统崩溃.rn FreeLibrary DllHandrnEnd Subrnrn但我要调用的DLL的<em>函数</em>几乎都是有参数,不知道怎么样实现rn向高手请教
c#动态调用dll中的类方法
救命的作业!
在VB.net中如何动态调用DLL,也就是COM接口问题
我有个软件自己搞了个解释器rn但是希望用户能够调用自己的DLLrn比如用户调用rnF("e:\abc.<em>dll</em>", x,y)rn意思是在那个库中有个名为F的<em>函数</em>,有2个参数X,Y,如何调用?
如何在DLL中动态调用另一个DLL?
如何在DLL中<em>动态调用</em>另一个DLL,请给出详细例程。
C#动态调用Dll中的方法
根据字符串调用同名<em>函数</em>,反射
动态调用DLL中导出的类
DLL的大部分调用都是利用.h和.lib,即使<em>动态调用</em>DLL也只是调用其中的导出的<em>函数</em>,而不是导出的类。也许很多小伙伴会说我<em>动态调用</em>是多此一举,但这里主要是技术交流,让大家知道这样做也是可行的。注意:类成员<em>函数</em>必须声明为虚<em>函数</em>,因为在调用程序中没有成员<em>函数</em>的实现,主要是为了欺骗编译器。
c++中动态调用dll导出类
extern "C" class __declspec(<em>dll</em>export) asdrnrn……rnrn以上是<em>dll</em>中的声明rnrn[b][color=#FF0000]重点::重点::重点::重点::重点::重点::重点::重点::rn重点::重点::重点::重点::重点::重点::重点::重点::rn重点::重点::重点::重点::重点::重点::重点::重点::[/color][/b]rn[size=24px]::::是<em>动态调用</em>!!!!!!!!!![/size]rnrnrn就像这样rnaaa = (lpaaa)GetProcAddress(hDll,"aaa"); rn
VB中如何动态调用dll
请问在vb中如何<em>动态调用</em><em>dll</em>rn我只知道首先调用API LoadLibaray 装载<em>dll</em>rn然后调用API GetProcAddress 得到<em>dll</em>的对应方法的地址rn后面就不知道了rn因为vb不像其他的有<em>函数</em>指针,在vb中要怎样声明<em>函数</em>原形,怎样把得到的<em>函数</em>地址赋给这个原形,希望哪位高人能指点,谢谢!
动态调用DLL比静态调用有什么好处,怎样动态调用dll中的函数?
以前学VB,调用<em>dll</em>中的<em>函数</em>必须静态申明再调用,delphi能实现<em>动态调用</em>吗?怎样实现?
在C++中如何动态调用第三方dll中的函数
一个第三方的<em>dll</em>,没有lib,有一个<em>函数</em>test,接受三个参数rn第一个 字符串a 作为返回rn第二个0rn第三个 字符串c,是一个文件的全路径rnrn这个<em>函数</em>的作用就是读取这个文件,处理后传给a返回rnrn我大概知道 LoadLibrary 加载<em>dll</em>,rnGetProcAddress 获取 <em>函数</em>test的地址rnrn现在关键是不指导如何传参数给它。。。rnrn求大神给个参考代码啊,谢谢了。
动态调用封装函数类的DLL (C++2008)
我有一个DLL,是外部语言开发的,DLL中的<em>函数</em>以类的形式进行了封装。导出时可通过类进行调用,这个DLL在外部语言中通过动态方式调入并已测试通过,所有功能都有可能“过类+<em>函数</em>名”的方式正常使用。rn如类名 MyClassrn类中<em>函数</em> MyClass.Func1( ....)rn MyClass.Func2( ....)rn MyClass.Func3( ....)rn MyClass.Func4( ....)rnrnrnrn现在我想通过C++的LoadLibrary、GetProcAddress、FreeLibrary 来实现对这个DLL中类的(动态装入DLL,不要静态装入DLL的方法)使用,如何实现。rn类中<em>函数</em>的接口说明已经知道,最好有实例代码。rn
VC如何动态调用DLL里的函数?
有例子最佳
c语言怎么动态调用dll函数
我的思路:c语言程序中输入数据,程序根据输入的字符串,查找<em>dll</em>list.txt获取<em>函数</em>并调用
动态调用动态链接库(.dll),包括函数和类的调用
C++,动态链接库的<em>动态调用</em>,以及如何<em>动态调用</em>库中的<em>函数</em>和类。
c#动态调用c++编写的DLL函数----求教
调用一个金橙子提供的(MarkEzd.<em>dll</em>)动态链接库。我将该<em>dll</em>文件分别置于..\bin与..\bin\Debug目录下,调试均失败。rnrn我编写的代码如下:rnusing System;rnusing System.Collections.Generic;rnusing System.ComponentModel;rnusing System.Data;rnusing System.Drawing;rnusing System.Linq;rnusing System.Text;rnusing System.Windows.Forms;rnusing System.Runtime.InteropServices;rnrnrnnamespace Code01rnrn public partial class Form1 : Formrn rn public Form1()rn rn InitializeComponent();rn rnrnrn ///<em>函数</em>名:lmcl_Initialrn ///目的:初始化lmcl控制卡rn ///语法int lmcl_Intitial(TCHAR* strEzCadPath,BOOL bTestMode,HWND hOwenWnd);rn ///strEzCadPath:是ezcad.exe所在的目录的全路径名称rn ///bTestMode:指是否测试模式rn ///hOwenWnd:指用户输入焦点的窗口,用于检测用户暂停消息rn ///描述:在程序中必须首先调用lmc_Initial,其他<em>函数</em>才能工作rn ///返回值:通用错误代码rn [DllImport("MarkEzd.<em>dll</em>",EntryPoint="lmcl_Initial",CharSet=CharSet.Auto,CallingConvention =CallingConvention.StdCall)]rn public static extern int lmcl_Initial(ref string strEzCadPath,bool bTestMode,string hOwenWnd);rnrnrnrn ///<em>函数</em>名:lmcl_Closern ///目的:关闭lmcl控制卡rn ///语法:int lmcl_Close();rn ///描述:在程序中退出时必须调用lmcl_Close来关闭lmcl控制卡rn ///返回值:通用错误代码rn [DllImport("MarkEzd.<em>dll</em>", EntryPoint = "lmcl_Close", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]rn public static extern int lmcl_Close();rnrnrn ///<em>函数</em>名:lmcl_LoadEzdFilern ///目的:打开指定的ezd文件,并清除当前数据库中的所有对象rn ///语法int lmcl_LoadEzdFile(TCHAR* strFileName);rn ///描述:在程序中一般用此<em>函数</em>来打开一个用户建立ezd模板文件,这样用户就不需要在程序中设置加工参数,因为模板中的加工参数会自动导入rn ///返回值:通用错误代码rn [DllImport("MarkEzd.<em>dll</em>", EntryPoint = "lmcl_LoadEzdFile", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]rn public static extern int lmcl_LoadEzdFile(ref string strFileName);rnrnrn ///<em>函数</em>名:lmcl_Markrn ///目的:标刻当前数据库里的所有数据rn ///语法:int lmcl_Mark(BOOL bFlyMark);rn ///bFlyMark=True 使能飞动打标rn ///描述:在使用lmcl_LoadEzdFile载入ezd文件后即可以使用此<em>函数</em>开始打标加工,此<em>函数</em>一直等待设备加工完毕后才返回rn ///返回值:通用错误代码rn [DllImport("MarkEzd.<em>dll</em>", EntryPoint = "lmcl_Mark", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]rn public static extern int lmcl_Mark(bool bFlyMark);rnrnrn ///<em>函数</em>名:lmcl_ChangeTextByNamern ///目的:更改指定名称的文本对象的文本内容rn ///语法:int lmcl_ChangeTextByName(tchar* strTextName,TCHAR* strTextNew);rn ///strTextName:要更改内容的文本对象的名称rn ///strTextNew:新的文本内容rn ///描述:在使用lmcl_LoadEzdFile载入ezd文件后,在每次加工前即可以使用此<em>函数</em>更改指定对象的内容rn ///返回值:通用错误代码rn [DllImport("MarkEzd.<em>dll</em>", EntryPoint = "lmcl_ChangeTextByName", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]rn public static extern int lmcl_ChangeTextByName(ref string strTextName, ref string strTextNew);rnrnrn private void Form1_Load(object sender, EventArgs e)rn rn textBox1.Text = "";//清空文本框rn rnrnrn private void button1_Click(object sender, EventArgs e)rn rn int dwErrCde;//初始化成功或错误rn string _strEzCadPath="C:\\EzCad2.1.3_UNICODE(20090912)\\EzCad2.exe";//存储ezcad.exe所在的目录的全路径名称rn bool _bTestMode=false ;//是否为测试模式rn string _hOwenWnd="";//用户输入焦点的窗口,用于检测用户暂停消息rn string _strFileName = "27701202";//指定的ezd模板文件rn bool _bFlyMark = true;//使能飞动打标rn string _strTextName = "2770120";//要更改内容的文本对象的名称rn string _strTextNew = "ABCDE02123456789";//新的文本内容rnrn dwErrCde = lmcl_Initial(ref _strEzCadPath, _bTestMode, _hOwenWnd);//设备初始化rnrn if (dwErrCde == 0)rn rnrn lmcl_LoadEzdFile(ref _strFileName);//加载打印模板rnrn lmcl_ChangeTextByName(ref _strTextName, ref _strTextNew);//填充模板的文本内容rnrn lmcl_Mark(_bFlyMark);//使能飞动打标rn rn rn lmcl_Close();rn rnrn rnrn rnrnrnrn调试时,语句“ dwErrCde = lmcl_Initial(ref _strEzCadPath, _bTestMode, _hOwenWnd);”报错,报错信息为“无法加载 DLL“MarkEzd.<em>dll</em>”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。”。rnrn我怀疑是"_hOwenWnd"赋值有误,可惜不知道此处该使用何种方式。文中可能还有其他错误,请大家帮忙。
急~怎么动态调用DLL中带参数的函数
我在MYDLL.<em>dll</em>中有以下<em>函数</em>原型:rnextern "C" __pascal(<em>dll</em>export) int mymethod(int par1,WORD ID);rnrn我在程序中有以下<em>动态调用</em>:rnint dd;rn   HINSTANCE myDLL1;rn   int _stdcall (*myfun)();rn   myDLL1=LoadLibrary(“MYDLL.<em>dll</em>”);rn   myfun=GetProcAddress(myDLL1,“mymethod”);rn dd=myfun(12,11);rnrn编译时提示dd=myfun(12,11);这行参数太多。rn我应该怎么调用DLL带参数的<em>函数</em>呢?rn我也试过静态调用,但是编译时找不到mymethod(int par1,WORD ID)的实现。rn注:rn 该DLL是在VC中生成的,我已经用IMPLIB 命令将他转为BCB的lib了。rn很急啊,请各位老大救命。rn
如何动态调用DLL。。。。(使用LoadLibrary()函数
1.我用VC做了基于Win32的Dll(sample.dsw,sample.c,sample.h,sample.def ),rn2.编译后产生(sample.<em>dll</em> , sample.lib)rn3.做了个测试程序(Demo.dsw,Demo.c Demo.h),在项目里加入了(sample.h)文件。rn4,编译 Demo.dsw, 连接时出现下列错误,rn Demo.obj : error LNK2001: unresolved external symbol "__declspec( rn <em>dll</em>import) int __cdecl ShowMe(void)" (__imp_?howMe@@YAHXZrn )rnDebug/Demo.exe : fatal error LNK1120: 1 unresolved externalsrnError executing link.exe.rnrnrnrnrnrn
dll函数动态调用工具1.0(Delphi+asm实现)
DLL<em>函数</em><em>动态调用</em>工具1.0 使用Delphi + Asm编写,只要知道DLL中<em>函数</em>的名字和参数,就可以对任意Dll的<em>函数</em>进行调用。目前已经可以支持以下类型的参数和返回值:Boolean,Byte,Shortint,Word,Smallint,Longword,Integer,Int64,Float,Double,String
动态调用DLL的函数出现如下提示
《 Access violation at address 00EC88AB in module 'Hcom32.<em>dll</em>',Write of address 00750042 》rn
怎么动态调用DLL中带参数的函数?内详
比如我的DLL中有个 int型的 myfunc(int @abc,int @ddd) rn其中参数abc,ddd都要返回运算结果的。<em>动态调用</em>怎么写?rnint abc;rnint ddd;rnabc=10;rnddd=100;rnrnHINSTANCE dd;rnint _stdcall (*ddd(int @abc,int @ddd));rndd=LoadLibrary("my<em>dll</em>.<em>dll</em>");rnddd=GetProcAddress(dd,"myfunc");rnx=ddd(abc,ddd)rn这样不正确,应该怎么写??
怎样查看某个dll中的函数信息?
我有一个<em>dll</em>连接库,但我不知道里面提供了一些什么样的<em>函数</em>,怎么样才能够查看到该<em>dll</em>中的<em>函数</em>信息呢?
dll动态调用dll传参数的问题
需要在一个a.<em>dll</em>中<em>动态调用</em>另一个b.<em>dll</em>,a.<em>dll</em>中有方法 get(i:integer):stdcall;在这个方法中调用了b.<em>dll</em>中的方法send(i:integer;str:string):stdcall,可是sendzhong的参数i怎么也得不到get传过来得参数i,是怎么一会事.
简单的动态调用dlldll的释放
简单的<em>动态调用</em><em>dll</em>及 <em>dll</em>的释放,运用了AppDomain——应用程序域
C#动态调用Dll的研究
介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自 动从资源中释放出来,通过静态加载延迟实现DLL<em>函数</em>的动态加载,程序退出后实现临 时文件的自动删除,从而为解决“DLL Hell”提供了一种解决方案。
如何动态调用DLL?
以下是比较三个数最大值的一个DLL,如何用<em>动态调用</em>?rnlibrary max;rnusesrn SysUtils,rn Classes;rn$R *.resrnfunction max1(a,b,c:integer):integer;stdcall;rnvar t:integer;rn beginrn if a>b then t:=arn else t:=b;rn if t>c then result:=trn else result:=c;rn end;rn exportsrn max1;rnbeginrnend.rnrn主程序有四个框,Edit1,Edit2,Edit3为输入框,Edit4为输出框
动态调用DLL的问题
请帮我把有****的地方解释一下..详细详细!!!rnrn//[code=delphi]rnprocedure TForm1.Button1Click(Sender: TObject);rntypernGetfun=function (x,y:integer):dword;stdcall; ******这个什么意思?为啥没有<em>函数</em>名rnvarrn DllHandle:Thandle; //DLL句柄rn fun:Getfun; *****这个也不明白rnbeginrn DllHandle:=loadlibrary('my<em>dll</em>.<em>dll</em>'); 加载DLL并返回句柄rn if Dllhandle <>0 thenrn beginrn try *****下面这句.如果需要指针.直接给指针地址不行么,如pintegerrn @fun:=getprocaddress(DllHandle,'myfun'); //获得<em>函数</em>名入口地址,并返回地址rn if Assigned(@Fun) then ****这句是检测是否给fun这个地址分配内存了么 rn beginrn showmessage(inttostr(fun(2,2)));rn end;rn finallyrn freelibrary(<em>dll</em>handle); //释放rn end;rn endrn elsern showmessage('未找到<em>dll</em>文件');rnend;[/code]
动态调用dll的问题
Win32动态链接库工程Dll2:rn[code=C/C++]rn/*************************main.h****************************/rn#ifndef DLL_APIrn#define DLL_API _declspec(<em>dll</em>import)rn#endifrnrnDLL_API int add(const int a,const int b);rnrn/*************************main.cpp**************************/rn#define DLL_API _declspec(<em>dll</em>export)rn#include "main.h"rnrnint add(const int a,const int b)rnrn return a+b;rnrn[/code]rnMFC基于对话框工程TestDll2:rn[code=C/C++]rn//对话框按钮“加法”(ID为IDC_BUTTON1)的消息响应rnvoid CTestDll2Dlg::OnButton1() rnrn HINSTANCE hDll=LoadLibrary("Dll2.<em>dll</em>");rn if(!hDll)rn rn MessageBox("加载动态链接库失败!");rn return;rn rnrn typedef int (*pAddProc)(const int a,const int b);rn pAddProc add=(pAddProc)GetProcAddress(hDll,"add");rn if(!add)rn rn MessageBox("找不到指定<em>函数</em>!");rn return;rn rnrn CString str;rn str.Format("3+5=%d",add(3,5));rn MessageBox(str);rnrn FreeLibrary(hDll);rnrn[/code]rnrn将生成的动态链接库Dll2.<em>dll</em>复制到工程TestDll2所在的目录,运行TestDll2.exe,提示“找不到指定<em>函数</em>!”!这是为什么?没觉得代码有什么问题啊?
dll动态调用问题,简单。。
我自己编的一个DLL 静态调用时是没有错误的 LIB也导入到工程里了rn动态时总是报错 跟踪了下 rnNewWindowProc=(lp)GetProcAddress(hins,"test");rn是这一步的问题 NewWindowProc的值是空 没有获取到<em>函数</em>的地址rn哪个大哥帮忙看下 付上代码rnTForm1 *Form1;rn//---------------------------------------------------------------------------rn__fastcall TForm1::TForm1(TComponent* Owner)rn : TForm(Owner)rnrnrn//---------------------------------------------------------------------------rnrnvoid __fastcall TForm1::Button1Click(TObject *Sender)rnrn typedef int (_cdecl *lp)();rn lp NewWindowProc=NULL;rnrn HINSTANCE hins=LoadLibrary("my<em>dll</em>o.<em>dll</em>");rn NewWindowProc=(lp)GetProcAddress(hins,"test");rnrn Edit1->Text=(NewWindowProc)();rnrnrn下面的是DLL的内容rnextern "C" _declspec(<em>dll</em>export) int test();rnrnint WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)rnrn return 1;rnrn//---------------------------------------------------------------------------rnint test()rnrn return 20;rnrn
关于动态调用dll
静态调用的方式使用完全正常rnrn现在给改为<em>动态调用</em>rnrn在Main.h里写<em>函数</em>申明(不是类内)rnbool (__stdcall * StartA)( void);rnrnHINSTANCE hdMRU;rnrn在Main.cpp的一<em>函数</em>内,也就是TForm类成员<em>函数</em>rn里写rn(FARPROC&)StartA =GetProcAddress(hd, "StartA" );rnrnrn在主进程里使用<em>函数</em>正常,但在线程里使用时就不正常了,并且线程都被终止了.
C++动态调用DLL
#include #include using namespace std; int main() { HINSTANCE DLLhwnd = LoadLibrary("<em>dll</em>_test.<em>dll</em>");//打开<em>dll</em>获取句柄 if(DLLhwnd) {//打开成功 typedef char* (WINAPI* FUNC)();//定义<em>函数</em>的参数类型和返回类型
DLL动态调用出错
我在<em>动态调用</em>DLL出现下面的错误:rnrnest2Dlg.obj : error LNK2001: unresolved external symbol "__declspec(<em>dll</em>import) public: virtual __thiscall MyDlg::~MyDlg(void)" (__imp_??1MyDlg@@UAE@XZ)rnTest2Dlg.obj : error LNK2001: unresolved external symbol "__declspec(<em>dll</em>import) public: __thiscall MyDlg::MyDlg(void)" (__imp_??0MyDlg@@QAE@XZ)rn我是这样调用的:rn HINSTANCE CurrentResource=AfxGetResourceHandle();rn HINSTANCE NewInstance=LoadLibrary(_T("Test3.<em>dll</em>"));rn AfxSetResourceHandle(NewInstance);rn afxDump<
动态调用DLL的问题2
知道DLL的<em>函数</em>的声明是 : int Init_com(char* set)rn没有LIB 所以只能<em>动态调用</em>:rn HINSTANCE hDLLICard;rn hDLLICard = LoadLibrary("ICcard_<em>dll</em>.<em>dll</em>"); //成功rn if(!hDLLICard)rn return 0;rn typedef int(*pInit_com)(char *set);rn pInit_com Init_com;rn Init_com = (pInit_com)GetProcAddress(hDLLICard, "Init_com"); //成功rn if(Init_com)rn Init_com(set); rn //到这里就出现 Unhandled exception in TestMyDll.exe :0XC0000005:Access Violation这个错误rnrn不知道原因 请高手指点下
OCX动态调用DLL的异常
我写了一个OCX 通过动态加载DLL调用安装的动态链接库,抛这个异常:rnFirst-chance exception at 0x00000000 in iexplore.exe: 0xC0000005: Access violation reading location 0x00000000.rnrn数据始终出不来,但是流量还是有的。rnrn有没有哪位朋友遇到过这样的情况,如何解决。
C#动态调用dll的方法?
想找一下<em>动态调用</em><em>dll</em>的方法,之前我用的是rn[DllImport("c-inter.<em>dll</em>", CallingConvention = CallingConvention.Cdecl)]rn public static extern void comp(string argv);rn但因为环境的需要,我需<em>动态调用</em>,及在使用时将该<em>dll</em>调入内存执行完毕就从内存中卸载下了。rn哪位大侠有比较好的方法实现啊。
关于dll 动态调用
一个<em>动态调用</em>DLL的 菜鸟问题:rnrn假如我在<em>dll</em>中有个<em>函数</em>function Max(X, Y: Integer): Integer; stdcall;rnrn然后在主程序中<em>动态调用</em>这个<em>dll</em>,rn开始是要myhandle := loadlibrary('*.<em>dll</em>') rn然后就要用GetProcAddress得到<em>函数</em>的地址.rn如果将这个地址赋值给一个变量,这个变量的类型是不是必须要 type 成 rnTGetMax = function (x:integer;y:integer): integer;stdcall; (就是要跟<em>dll</em>中申明的完全一样)rn然后再var myfunc:TGetMax;rnmyfun := GetProcAddress(myhandle,'Max');rnrn有没有一种通用变量,来保存GetProcAddress返回的值能?我在一些资料上看过 TFarProc类型,可是在delphi帮助中却没有看到,rn这个问题甚是迷惑,请各位高手赐教.rnrn另外 就是给这个变量赋值问题rn有的这么写的:rn[color=#FF0000]@[/color]myfun := GetProcAddress(DLLHandle, 'Min');rnif [color=#FF0000]Assigned[/color](@myfun) thenrnbeginrn D := myfun(2,3);rn showmessage(inttostr(d));rnend;rnrn还有一种是rnmyfun := GetProcAddress(DLLHandle, 'Min');rnD := myfun(2,3);rnrn这两种写法有什么区别,是否都正确?@,Assigned是什么意思?rn谢谢先!!rnrnrn
vb动态调用dll
我用Loadlibrary和GetProcAddress得到了<em>函数</em>AAA(无参数)的入口地址rn接下来怎么调用<em>函数</em>AAA()啊?rn
关于动态调用DLL
小弟弄了一个DLL,想通过<em>动态调用</em>的方式调用,但是在写调用程序的时候出错了。rn先来看看我的DLL吧,如下:rnextern "C" __declspec(<em>dll</em>export) int __stdcall SlopOver(int LR,int UD);rnint __stdcall SlopOver(int LR,int UD)rnrn if ((LR==0) || (LR==352) || (UD==0) || (UD==296))rn rn ShowMessage("错误!");rn rn elsern rn return 0;rn rnrn生成SlopOver.<em>dll</em>rn然后<em>动态调用</em>:rnvoid __fastcall TForm1::Button1Click(TObject *Sender)rnrn int Temp1 = StrToInt(Edit1->Text);rn int Temp2 = StrToInt(Edit2->Text);rn HINSTANCE dd;rn int _stdcall (*ddd)(void);rn dd=LoadLibrary("SlopOver.<em>dll</em>");rn ddd=GetProcAddress(dd,"test");rn ddd(Temp1,Temp2); //----------这行错误!!!!rn FreeLibrary(dd);rnrn在上面的注释段出错了,提示[C++ Error] Unit1.cpp(26): E2226 Extra parameter in callrn我已经将SlopOver拷贝到调用的文件夹中,然后又将SlopOver.lib加进去了。rn不知道是怎么回事,请高手解答!
如何动态调用DLL?
编程中我遇到了一个动态编译的DLL,没有.LIB 和.Hrn在APP中如下调用 ,可是我在其他类中如何使用这些<em>函数</em>呀?rnrnrn//<em>函数</em>定义rntypedef LONG (CALLBACK* LPFNDLLFUNC1)(LONG);rn// 定义一个<em>函数</em>指针的类型 LPFNDLLFUNC1 , 这个类型是自己定义的,类型名为 LPFNDLLFUNC1 rnrntypedef LONG (CALLBACK* LPFNDLLFUNC2)(LONG);rntypedef LONG (CALLBACK* LPFNDLLFUNC3)(LONG,CHAR *,CHAR *);rntypedef LONG (CALLBACK* LPFNDLLFUNC4)(LONG,CHAR *,CHAR *);rntypedef LONG (CALLBACK* LPFNDLLFUNC5)(LONG);rntypedef LONG (CALLBACK* LPFNDLLFUNC6)();rnrnHINSTANCE hInsDLL;rnLPFNDLLFUNC1 fnInitModem; // Function pointer 1 这里利用自己定义的类型名LPFNDLLFUNC1定义了一个fnInitModem的<em>函数</em>指针!rnLPFNDLLFUNC2 fnCloseModem; // Function pointer 2rnLPFNDLLFUNC3 fnSendMsg; // Function pointer 3rnLPFNDLLFUNC4 fnReadMsgEx; // Function pointer 4rnLPFNDLLFUNC5 fnGetStatus; // Function pointer 5rnLPFNDLLFUNC5 fnGetSndCount;rnLPFNDLLFUNC5 fnGetRecCount;rnLPFNDLLFUNC5 fnClrSndBuf; rnLPFNDLLFUNC5 fnClrRecBuf; rnLPFNDLLFUNC6 fnDogSerial;rnrnrn //====------------------------------------------------rn //取得<em>函数</em>地址rn hInsDLL=LoadLibrary("MonDem");rn if(hInsDLL==NULL)rn ShowMessageNULL( IDS_LOADDLL_FAILED );rn else rn fnInitModem = (LPFNDLLFUNC1)GetProcAddress(hInsDLL,"fnInitModem");rn fnCloseModem = (LPFNDLLFUNC2)GetProcAddress(hInsDLL,"fnCloseModem");rn fnSendMsg = (LPFNDLLFUNC3)GetProcAddress(hInsDLL,"fnSendMsg");rn fnReadMsgEx = (LPFNDLLFUNC4)GetProcAddress(hInsDLL,"fnReadMsgEx");rn fnGetStatus = (LPFNDLLFUNC5)GetProcAddress(hInsDLL,"fnGetStatus");rn fnGetSndCount = (LPFNDLLFUNC5)GetProcAddress(hInsDLL,"fnGetSndCount");rn fnGetRecCount = (LPFNDLLFUNC5)GetProcAddress(hInsDLL,"fnGetRecCount");rn fnClrSndBuf = (LPFNDLLFUNC5)GetProcAddress(hInsDLL,"fnClrSndBuf");rn fnClrRecBuf = (LPFNDLLFUNC5)GetProcAddress(hInsDLL,"fnClrRecBuf");rn fnDogSerial = (LPFNDLLFUNC6)GetProcAddress(hInsDLL,"fnDogSerial");rn rnrn
dll动态调用出错了
我在<em>动态调用</em><em>dll</em>时老出现如下错误rn Project' 'raise too many consecutive exceptions 'access violation at 0X00000000:read of address 0X0000000'rnrn 调用代码:重要是在Log.<em>dll</em>中包含窗体,通过LoadSearchForm调出窗体rn rn unit <em>dll</em>test;rnrninterfacernrnusesrn Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,rn Dialogs, StdCtrls;rnrntypern TForm1 = class(TForm)rn Button1: TButton;rn procedure Button1Click(Sender: TObject);rn privatern Private declarations rn publicrn Public declarations rn end;rntypern TLoadSearchForm=procedure (Handle:Thandle);stdcall;rnvarrn Form1: TForm1;rnrnrnimplementationrnrn$R *.dfmrnrnprocedure TForm1.Button1Click(Sender: TObject);rnrnvarrn handle:Thandle;rn LoadSearchForm:TLoadSearchForm;rnbeginrn handle:=Loadlibrary(pchar('Log.<em>dll</em>'));rn tryrn if handle<>0 thenrn @LoadSearchForm:=GetProcAddress(handle,pchar('LoadSearchForm'));rn if Assigned(@LoadSearchForm) thenrn beginrn LoadSearchForm(Application.Handle);rn endrn elsern RaiseLastOSError;rn finallyrn FreeLibrary(handle);rn end;rnend;rnrnend.
关于动态调用DLL的问题
DLL的代码:rnlibrary test<em>dll</em>3;rnrn Important note about DLL memory management: ShareMem must be thern first unit in your library's USES clause AND your project's (selectrn Project-View Source) USES clause if your DLL exports any procedures orrn functions that pass strings as parameters or function results. Thisrn applies to all strings passed to and from your DLL--even those thatrn are nested in records and classes. ShareMem is the interface unit torn the BORLNDMM.DLL shared memory manager, which must be deployed alongrn with your DLL. To avoid using BORLNDMM.DLL, pass string informationrn using PChar or ShortString parameters. rnrnusesrn SysUtils,rn Classes;rnrn$R *.resrnrnfunction bulk(x,y,z:Double):Double;stdcall;rnbeginrn result:=x*y*z;rnend;rnrnexportsrn bulk index 1;rnbeginrnend.rnrnrnrn、、、、、、、、、、、、、、、、、、、、、、rn调用程序代码:rnprocedure TForm1.Button1Click(Sender: TObject);rnvarrn Moudle:THandle;rn PFunc:TFarProc;rn rn e:Double;rnbeginrn rn Moudle:=Loadlibrary('test<em>dll</em>3.<em>dll</em>');rn ShowMessage(intToStr(Moudle));rn if Moudle>32 thenrn beginrnrn PFunc:=GetProcAddress(Moudle,'bulk');rn if PFunc<>nil thenrn beginrn //我想在这里调用DLL中的bulk<em>函数</em>请问怎么调用?rn ShowMessage('PFunc found');rn endrn elsern ShowMessage('PFunc is nil');rn endrn elsern ShowMessage('tht <em>dll</em> is not found');rnend;
动态调用DLL的问题!
数据库字段如下rnF_vchManuText F_vchClassName F_vchClassDetail F_vchClassParrn业务处理 getTest.<em>dll</em> getTest.getTest show:lgparam,mdiparent,1rnrn字段说明:F_vchManuText功能模块名; F_vchClassName所对应的DLL名;F_vchClassDetail命名空间及类;F_vchClassPar 方法名及对应参数rnrngetTest.<em>dll</em> 的接口方法如下:rnpublic void show(NetDataCommon.LoginParam lgParam,System.Windows.Forms.Form mdiparent,int intType)rn参数说明:NetDataCommon.LoginParam lgParam 是我用户登录信息类rn System.Windows.Forms.Form mdiparent 当前MDI窗体rn int intType 类别参数rnrn请教各位在程序里通过记录集,<em>动态调用</em>getTest.<em>dll</em>该怎么调用啊,请指点一二啊!!rn
如何动态调用dll
想<em>动态调用</em><em>dll</em>,最好举个例子!
VC 在ActiveX中动态调用外部DLL函数.rar
VC 在ActiveX中<em>动态调用</em>外部DLL<em>函数</em>,演示如何在ActiveX控件中<em>动态调用</em>来自外部的DLL<em>函数</em>,虽然不常用,研究学习一下也不多余哦,里面有两个调用DLL的例子。
关于DLL动态调用
我用静态调用时,可以显示出Form,可是<em>动态调用</em>时,就说找不到DLL中<em>函数</em>的指针,onClick事件代码如下:rnrnvoid __fastcall TForm1::Button1Click(TObject *Sender)rnrn HINSTANCE hInst;rn if(hInst == NULL)rn rn hInst = LoadLibrary("Project2.<em>dll</em>");rn rn if (hInst!=NULL)rn rn (FARPROC &)displayForm = GetProcAddress(hInst,"inputinterface");rn if (displayForm!=NULL)rn rn displayForm();rn rn elsern rn ShowMessage("无法获取调用<em>函数</em>的指针");rn rn elsern rn ShowMessage("无法载入DLL文件");rn rn //TForm2* temp = new TForm2(NULL);之前用的静态调用rn //temp->inputinterface();之前用的静态调用rnrn
vs2008 动态调用dll出错
#include "stdafx.h"rn#include rn//#include rn#include rn rnint _tmain(int argc, _TCHAR* argv[])rnrn typedef BOOL(__stdcall* fun)(PCERT_SELECT_STRUCT_W pCertSelectStruct);rn fun new_fun;rn HMODULE hModule = LoadLibrary(TEXT("CryptDlg.<em>dll</em> "));rn if (hModule)rn rn new_fun = (fun)GetProcAddress(hModule, "CertSelectCertificate");rn rn rn new_fun(NULL);rn free(hModule);rnrn rn rn rntestdlg.exe 中的 0x00000000 处未处理的异常: 0xC0000005: Access violationrn出错位置:rnnew_fun(NULL);rn rn在线等解决
C#动态调用dll
有个 DLL文件 路径是:D:\123123\123.<em>dll</em> ,要调用这个DLL文件里面的 1234方法,rn1234 方法 :rn参数1: string a rn参数2: int b rn 返回值: bool c rn求代码!这里感谢了!
C#动态调用dll的问题
在程序目录下有个a文件夹。里边有a.<em>dll</em>和a.exe两个文件rn程序通过反射调用a.<em>dll</em>,a.<em>dll</em>中有个方法open打开a.exern当我的程序在调用a.<em>dll</em>时提示无法找到对应的程序,意思就是路径不对,但是我把路径定位到a\a.<em>dll</em>后,再次调用a.<em>dll</em>中的open就会出现不停打开a.exe的情况。rnrn请教一下,这种情况下我该如何调用a.<em>dll</em>中的open方法来打开a.exern
dll动态调用的问题
我用VC 2003新建了一个<em>dll</em>项目,在其中添加了连接操作mysql数据库的代码(ODBC方式),再用另一个项目调用该<em>dll</em>,发现无效,而直接在应用程序中这样做是正确的,用dumpbin发现该<em>dll</em>无导出列表,但是我用同样的方法写的另一个<em>dll</em>是可以的,不知道应该怎么做,望大侠赐教rnrn代码如下:rnodbcManager.cpp//<em>dll</em>在此实现rnrn#include rn#include rn#include rn#include rn#include rn#include rnrnrn/* 定义一些在数据库操作中用到的全局变量 */rn#define MAXBUFLEN 255rnrnrn/* 以下为对odbc数据源的具体操作部分 */rnrn// 连接odbc数据源,传递三个参数:DSN名,用户名,用户密码rnchar * odbcExecute(char * dsnname, char * user, char * passwd, char * sql)rnrnSQLHENV henv = SQL_NULL_HENV;rnSQLHDBC hdbc = SQL_NULL_HDBC;rnSQLHSTMT hstmt = SQL_NULL_HSTMT;rnrnRETCODE retcode;rnrnSQLCHAR result[MAXNAME+1];rnSQLINTEGER sqlint;rnrnrn// out为返回的结果字符串rnchar * out ;rnretcode = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);rnretcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);rnretcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);rnretcode = SQLConnect(hdbc, (SQLCHAR *)dsnname, SQL_NTS, (SQLCHAR *)user, SQL_NTS, (SQLCHAR *)passwd, SQL_NTS);rnif(retcode == SQL_SUCCESS)rnrn// 执行sql语句,并返回结果rn// ps.由于从LoadRunner中调用的角度讲,此时所期望得到的只是单一的数据,因此返回的是数据库中的第一条记录,且长度不能超过128rn// 对于此处的程序设计,目前不太合理,今后会加以优化rnrnretcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);rnretcode = SQLPrepare(hstmt, (SQLCHAR *)sql, SQL_NTS);rnretcode = SQLExecute(hstmt);rnrnretcode = SQLBindCol(hstmt, 1, SQL_C_CHAR, result, MAXNAME, &sqlint);rnrnif(SQLFetch(hstmt) != SQL_NO_DATA)rnrnout = (char *)result;rnrnelsernrnout = "Execute Error";rnrnrnelsernrnout = "Connect Error";rnrnrn// 关闭连接,清理环境rnSQLFreeHandle(SQL_HANDLE_STMT, hstmt);rnSQLDisconnect(hdbc);rnSQLFreeHandle(SQL_HANDLE_DBC, hdbc);rnSQLFreeHandle(SQL_HANDLE_ENV, henv);rnrnreturn out;rnrnrnodbcManager.h//rnrn#ifndef LIB_Hrn#define LIB_Hrnrn//以extern type "C" __declspec(<em>dll</em>export)形式声明可被外界调用的<em>函数</em>rn//extern "C" char * __declspec(<em>dll</em>export) odbcConnect(char * dsnname, char * user, char * passwd);rnextern "C" char * __declspec(<em>dll</em>export) odbcExecute(char * dsnname, char * user, char * passwd, char * sql);rnrn#endifrnrn用来调试的应用程序代码如下rncall.cpprnrn// call.cpp : 定义控制台应用程序的入口点。rn//rnrn#include "stdafx.h"rn#include "windows.h"rntypedef char * (*lpAddFun)(char *, char *, char *, char *);rnrnint _tmain(int argc, _TCHAR* argv[])rnrnHINSTANCE hDll;rnlpAddFun addFun;rnhDll = LoadLibrary("odbcManager.<em>dll</em>");rnif(hDll != NULL)rnrnaddFun = (lpAddFun)GetProcAddress(hDll, "odbcExecute");rnif(addFun != NULL)rnrnchar * res = addFun("test","root","suzsoft","SELECT passwd FROM user");rnprintf("%s", res);rnrnFreeLibrary(hDll);rnrnelsernrnrnreturn 0;rnrnrn
动态调用DLL的问题呀
我如下<em>动态调用</em>一DLL时rn库里的程序能正确执行rnCommand里的命令是rnMessageBox(0,"A","<em>dll</em> call",0);rn但我一点击确定后rn程序出错,出错代码为:rnDebug Error!rnrnProgram:............rnModule:rnFile:i386\chkesp.crnLine:42rnrnThe value of ESP was not properly saved across a function all, the isrnusually a result of calling a function declared with one calling convention with a function pointer declared with a different calloing converntion.rn///////////////////////////////////////////////////rn程序代码如下:rn HMODULE fp;rn typedef int (*PROC1)(int);rn if(1)rn rn fp = LoadLibrary("c.<em>dll</em>");rnrn PROC1 proc = (PROC1)GetProcAddress(fp, "Command");rn int a = (*proc)(0);rn rnrn FreeLibrary(fp);rnrn////////////////////////rn程序代码如下时不会出任何的错误:rn HMODULE fp;rn typedef int (*PROC1)();rn if(1)rn rn fp = LoadLibrary("c.<em>dll</em>");rnrn PROC1 proc = (PROC1)GetProcAddress(fp, "Command");rn int a = (*proc)();rn rnrn FreeLibrary(fp);rn/////////////////////////////////////////rnWHYWHYWHYWHYWHYWHYWHYWHYWHYWHYWHYWHYWHYWHYWHYWHYWHYrn
关于动态调用DLL的问题!
以下是照着书打的几句代码,rn结果出现错误:[C++ Error] Unit1.cpp(22): E2188 Expression syntax rnrnvoid (*SaySomething)(HWND);rn HINSTANCE <em>dll</em>Handle = LoadLibrary("TestDLL.<em>dll</em>");rn SaySomething = (void(*)HWND);  // 错误出现在此行!rn GetProcAddress(<em>dll</em>Handle,"_SaySomething");rn SaySomething(Application->Handle);rn FreeLibrary(<em>dll</em>Handle);rnrn请问是什么问题? 请大侠留msn
动态调用DLL的困惑
这个问题我曾经在论坛提出过,rn但是由于我水平有限,无法将问题表述清楚,rn导致大家也没能帮上我的忙,rn现在,我又彻夜写程序,并且仔细查看了MSDN,rn尝试对代码进行改动以便查找原因。rn最终发现问题出在“CALLBACK”上,rnrn程序代码大致如下:rntypedef BOOL (CALLBACK* pMobileInit)(DWORD, DWORD, LPCTSTR);//注意这里rnHINSTANCE hDLL;rnhDLL = LoadLibrary("SMEIDll.<em>dll</em>");//加载动态链接库rnif (hDLL == NULL) return;rnpMobileInit mobileinit;rnmobileinit = (pMobileInit)GetProcAddress(hDLL,"IFInitInterface");//加载<em>函数</em>rnif (!mobileinit)rnrn FreeLibrary(hDLL);//卸载<em>dll</em>rn return;rnrn.........rnrn这下终于成功了,以前之所以不成功,就是第一行少了CALLBACK,rn我在一个论坛帖上看到人家没有用“CALLBACK”,rn不用的话,在调用mobileinit<em>函数</em>时出错,rn用了就正常,rnCALLBACK实际上就是“__stdcall”,rn请问,哪些情况下要用到它?哪些情况不要用它。rnrn以上调用虽然成功,但还有一个问题:rn我成功调用<em>函数</em>以后不能“FreeLibrary(hDLL)”rn一旦FreeLibrary就死掉,rnMSDN里的例子确实没有FreeLibrary,rn但是没有说明为什么不须要。rn难道要让<em>dll</em>存在吗?
Dll文件动态调用
procedure TMakeCode.ShowDllForm; type TShowForm = Function(PH: HWnd; MemoW: TMemo):Integer;Stdcall; var ShowDllForm: TShowForm; DllFileName: String; //例如 C:\Dll\Dllname.<em>dll</em> Ha
C#程序实现动态调用DLL
详细讲解了c#程序实现<em>动态调用</em><em>dll</em>的不同方法,过程,及区别
delphi动态调用Dll
delphi <em>动态调用</em><em>dll</em> 最实用的调用<em>dll</em>的方法。
Delphi DLLExportInterface 动态调用Dll
Delphi DLLExportInterface <em>动态调用</em>Dll Delphi DLLExportInterface <em>动态调用</em>Dll
动态调用dll方法及事例
这是一个如何<em>动态调用</em><em>dll</em>的事例,给大家作为一个参考,这是在做大型应用程序的时候经常要用到的
动态调用DLL的困惑!
这个问题我曾经在论坛提出过,rn但是由于我水平有限,无法将问题表述清楚,rn导致大家也没能帮上我的忙,rn现在,我又彻夜写程序,并且仔细查看了MSDN,rn尝试对代码进行改动以便查找原因。rn最终发现问题出在“CALLBACK”上,rnrn程序代码大致如下:rntypedef BOOL (CALLBACK* pMobileInit)(DWORD, DWORD, LPCTSTR);//注意这里rnHINSTANCE hDLL;rnhDLL = LoadLibrary("SMEIDll.<em>dll</em>");//加载动态链接库rnif (hDLL == NULL) return;rnpMobileInit mobileinit;rnmobileinit = (pMobileInit)GetProcAddress(hDLL,"IFInitInterface");//加载<em>函数</em>rnif (!mobileinit)rnrn FreeLibrary(hDLL);//卸载<em>dll</em>rn return;rnrn.........rnrn这下终于成功了,以前之所以不成功,就是第一行少了CALLBACK,rn我在一个论坛帖上看到人家没有用“CALLBACK”,rn不用的话,在调用mobileinit<em>函数</em>时出错,rn用了就正常,rnCALLBACK实际上就是“__stdcall”,rn请问,哪些情况下要用到它?哪些情况不要用它。rnrn以上调用虽然成功,但还有一个问题:rn我成功调用<em>函数</em>以后不能“FreeLibrary(hDLL)”rn一旦FreeLibrary就死掉,rnMSDN里的例子确实没有FreeLibrary,rn但是没有说明为什么不须要。rn难道要让<em>dll</em>存在吗?
DLL静态和动态调用
采用lib文件调用DLL(采用Lib文件的调用方式又被称为静态调用) 静态调用定义: 静态调用,也称为隐式调用,由编译系统完成对DLL的加载和应用程序结束时DLL卸载的编码(Windows系统负责对DLL调用次数的计数),调用方式简单,能够满足通常的要求。通常采用的调用方式是把产生动态连接库时产生的.LIB文件加入到应用程序的工程中,想使用DLL中的<em>函数</em>时,只须在源文件中声明一下。 LIB文件
MAX485数据手册PDF文件下载
总线驱动芯片 MAX485数据手册 PDF文件 相关下载链接:[url=//download.csdn.net/download/wugongyu/2401769?utm_source=bbsseo]//download.csdn.net/download/wugongyu/2401769?utm_source=bbsseo[/url]
三极管放大电路下载
三极管是电流放大器件,有三个极,分别叫做集电极C,基极B,发射极E。分成NPN和PNP两种。我们仅以NPN三极管的共发射极放大电路为例来说明一下三极管放大电路的基本原理 相关下载链接:[url=//download.csdn.net/download/sq1992_cn/3652202?utm_source=bbsseo]//download.csdn.net/download/sq1992_cn/3652202?utm_source=bbsseo[/url]
模拟QQ聊天源程序下载
VC开发的QQ聊天工具,主要模拟QQ登录聊天功能,适合初学网络方面的同学学习 相关下载链接:[url=//download.csdn.net/download/gen2008107/4300038?utm_source=bbsseo]//download.csdn.net/download/gen2008107/4300038?utm_source=bbsseo[/url]
相关热词 c#异步发送kafka c#窗体编号 c# 操作二进制文件 c# 反射 机制 c#线程 窗体失去响应 c#角度转弧度 c# 解析gps数据 c# vs设置 语法版本 c# json含回车 c#多线程demo
我们是很有底线的