//------------------这是VS中的程序-------------------------------------------------------------
//------------------举其中两个函数的例子-------------------------------------------------------------
typedef int (__stdcall*lpfnOpenTopDll)();
lpfnOpenTopDll pOpenTopDll;
typedef int (*lpfnSendHWND)(HWND);
lpfnSendHWND pSendHWND;
HINSTANCE hInstTopdll;
hInstTopdll=LoadLibrary("TdecApi.dll");
if (hInstTopdll)
{
pOpenTopDll=(lpfnOpenTopDll)GetProcAddress(hInstTopdll, "OpenTopdll");
SysNum=pOpenTopDll();
pSendHWND=(lpfnSendHWND)GetProcAddress(hInstTopdll, "SendHandle");
pSendHWND(handle);
}
//-------------------------------------------------------------------------------------------------------------
//-----------------TdecApi.h-----------------------------
extern "C" __declspec(dllexport) __stdcall OpenTopdll();
extern "C" __declspec(dllexport) SendHandle(HWND) ;
//----------------------------------------------------------------
//--------------BCB程序 #include "ClsTopDll4bcb.cpp"----------------------------------------------------
#include "ClsTopDll4bcb.h"
#include "TdecApi.h"
int TopDllEx::OpenTopDll()
{
int SysNum;
SysNum=_OpenTopdll();
}
void TopDllEx::SendHandle(HWND handle)
{
SendHandle(handle);
}
//--------------------------------------------------------------------------
//------------------------------------- TDECAPI.def-------------------------------------------
LIBRARY TDECAPI.DLL
EXPORTS
??0CTopAcqManager@@QAE@XZ @29 ; ??0CTopAcqManager@@QAE@XZ
??0CTopAcqSys@@QAE@HHHPAU_DEVICE_LOCATION@@@Z @30 ; ??0CTopAcqSys@@QAE@HHHPAU_DEVICE_LOCATION@@@Z
DisableOutData@CTopCardBase@@UAEXH@Z
?Disable_OutData@CTopAcqSys@@QAEXHH@Z @56 ; ?Disable_OutData@CTopAcqSys@@QAEXHH@Z
?DumpWaveRealShow@CTopAcqSys@@QAEHHPAF@Z @57 ; ?DumpWaveRealShow@CTopAcqSys@@QAEHHPAF@Z
?DumpWaveRealShow@CTopCardBase@@UAEHHPAF@Z @58 ; ?DumpWaveRealShow@CTopCardBase@@UAEHHPAF@Z
?EnableACQ@CTopAcqSys@@QAEHH@Z @59 ; ?EnableACQ@CTopAcqSys@@QAEHH@Z
?EnableACQ@CTopCardBase@@UAEHXZ @60 ; ?EnableACQ@CTopCardBase@@UAEHXZ
?EnableOutData@CTopCardBase@@UAEXH@Z @61 ; ?EnableOutData@CTopCardBase@@UAEXH@Z
?Enable_OutData@CTopAcqSys@@QAEXHH@Z @62 ; ?Enable_OutData@CTopAcqSys@@QAEXHH@Z
?FetchData@CTopAcqSys@@QAEHH@Z @63 ; ?FetchData@CTopAcqSys@@QAEHH@Z
?FetchData@CTopCardBase@@UAEHH@Z @64 ; ?FetchData@CTopCardBase@@UAEHH@Z
?FocusP@CTopAcqSys@@QAEHHJ@Z @65 ; ?FocusP@CTopAcqSys@@QAEHHJ@Z
?FocusP@CTopCardBase@@UAEHHJ@Z @66 ; ?FocusP@CTopCardBase@@UAEHHJ@Z
?GetAcqSys_p@CTopAcqManager@@QAEPAXH@Z @67 ; ?GetAcqSys_p@CTopAcqManager@@QAEPAXH@Z
?GetBaseAdr@CTopCardBase@@UAEKXZ @68 ; ?GetBaseAdr@CTopCardBase@@UAEKXZ
?GetBufferL@CTopCardBase@@UAEKXZ @69 ; ?GetBufferL@CTopCardBase@@UAEKXZ
?GetBufferPtr@CTopCardBase@@UAEPAKXZ @70 ; ?GetBufferPtr@CTopCardBase@@UAEPAKXZ
?GetCardBase_p@CTopAcqSys@@QAEPAXH@Z @71 ; ?GetCardBase_p@CTopAcqSys@@QAEPAXH@Z
?GetCardNum@CTopAcqSys@@QAEHXZ @72 ; ?GetCardNum@CTopAcqSys@@QAEHXZ
?GetHead@CTopAcqSys@@QAEXHPAX@Z @73 ; ?GetHead@CTopAcqSys@@QAEXHPAX@Z
?IOOut@CTopCardBase@@UAEXHE@Z @83 ; ?IOOut@CTopCardBase@@UAEXHE@Z
?IOSelect@CTopCardBase@@UAEXH@Z @84 ; ?IOSelect@CTopCardBase@@UAEXH@Z
?IO_In@CTopAcqSys@@QAEEHH@Z @85 ; ?IO_In@CTopAcqSys@@QAEEHH@Z
?IO_Out@CTopAcqSys@@QAEXHHE@Z @86 ; ?IO_Out@CTopAcqSys@@QAEXHHE@Z
?IO_Select@CTopAcqSys@@QAEXHH@Z @87 ; ?IO_Select@CTopAcqSys@@QAEXHH@Z
?InitAddress@CTopCardBase@@UAEKXZ @88 ; ?InitAddress@CTopCardBase@@UAEKXZ
?InitManager@CTopAcqManager@@QAEHXZ @89 ; ?InitManager@CTopAcqManager@@QAEHXZ
?InterruptThreadDisable@CTopCardBase@@EAEHPAX@Z @90 ; ?InterruptThreadDisable@CTopCardBase@@EAEHPAX@Z
?InterruptThreadEnable@CTopCardBase@@EAEHPAPAXPAXP6AX1@Z1@Z @91 ; ?InterruptThreadEnable@CTopCardBase@@EAEHPAPAXPAXP6AX1@Z1@Z
?InterruptThreadHandler@CTopCardBase@@UAGKPAX@Z @92 ; ?InterruptThreadHandler@CTopCardBase@@UAGKPAX@Z
?InterruptThreadHandler_New@CTopAcqSys@@QAEXXZ @93 ; ?InterruptThreadHandler_New@CTopAcqSys@@QAEXXZ
?Is_inAcq@CTopCardBase@@QAEHXZ @94 ; ?Is_inAcq@CTopCardBase@@QAEHXZ
?MTrg@CTopAcqSys@@QAEXH@Z @95 ; ?MTrg@CTopAcqSys@@QAEXH@Z
?Modify_EEP2MBX0@CTopAcqManager@@AAEHPAXK@Z @96 ; ?Modify_EEP2MBX0@CTopAcqManager@@AAEHPAXK@Z
?Mtrg@CTopCardBase@@UAEXXZ @97 ; ?Mtrg@CTopCardBase@@UAEXXZ
?Pack2CHEx@CTopAcqSys@@QAEHHPAF0HHJJH@Z @98 ; ?Pack2CHEx@CTopAcqSys@@QAEHHPAF0HHJJH@Z
?Pack2CHEx@CTopCardBase@@UAEHHPAF0HHJJH@Z @99 ; ?Pack2CHEx@CTopCardBase@@UAEHHPAF0HHJJH@Z
?Pack@CTopAcqSys@@QAEHHPAFHHJJ@Z @100 ; ?Pack@CTopAcqSys@@QAEHHPAFHHJJ@Z
?Pack@CTopCardBase@@UAEHHPAFHHJJ@Z @101 ; ?Pack@CTopCardBase@@UAEHHPAFHHJJ@Z
?PackEx@CTopAcqSys@@QAEHHPAFHHJJH@Z @102 ; ?PackEx@CTopAcqSys@@QAEHHPAFHHJJH@Z
?PackEx@CTopCardBase@@UAEHHPAFHHJJH@Z @103 ; ?PackEx@CTopCardBase@@UAEHHPAFHHJJH@Z
?PreSynAcq@CTopAcqSys@@AAEHH@Z @104 ; ?PreSynAcq@CTopAcqSys@@AAEHH@Z
?PreSynAcq@CTopCardBase@@UAEHXZ @105 ; ?PreSynAcq@CTopCardBase@@UAEHXZ
?Range@CTopCardBase@@UAENH@Z @106 ; ?Range@CTopCardBase@@UAENH@Z
?Rate@CTopCardBase@@UAENXZ @107 ; ?Rate@CTopCardBase@@UAENXZ
?RealTimeCmdIn@CTopCardBase@@UAEXH@Z @108 ; ?RealTimeCmdIn@CTopCardBase@@UAEXH@Z
?RealTimeCmdOut@CTopCardBase@@UAEXH@Z @109 ; ?RealTimeCmdOut@CTopCardBase@@UAEXH@Z
?ResetCard@CTopCardBase@@UAEXXZ @110 ; ?ResetCard@CTopCardBase@@UAEXXZ
?RestorePtr@CTopCardBase@@UAEHXZ @111 ; ?RestorePtr@CTopCardBase@@UAEHXZ
?RstCardStatus@CTopCardBase@@EAEXXZ @112 ; ?RstCardStatus@CTopCardBase@@EAEXXZ
?Selftest@CTopCardBase@@UAEHXZ @113 ; ?Selftest@CTopCardBase@@UAEHXZ
?SendPtr@CTopCardBase@@UAEHPAKK@Z @114 ; ?SendPtr@CTopCardBase@@UAEHPAKK@Z
?SetADMode@CTopCardBase@@UAEHHK@Z @115 ; ?SetADMode@CTopCardBase@@UAEHHK@Z
?SetAll@CTopCardBase@@UAEXXZ @116 ; ?SetAll@CTopCardBase@@UAEXXZ
?SetAnalog@CTopCardBase@@UAEXXZ @117 ; ?SetAnalog@CTopCardBase@@UAEXXZ
?SetBasev@CTopCardBase@@UAEHHN@Z @118 ; ?SetBasev@CTopCardBase@@UAEHHN@Z
?SetChHd@CTopCardBase@@UAEXXZ @119 ; ?SetChHd@CTopCardBase@@UAEXXZ
?SetChtrg@CTopCardBase@@UAEHHPAUCHtrginfo@@@Z @120 ; ?SetChtrg@CTopCardBase@@UAEHHPAUCHtrginfo@@@Z
?SetClkSrc@CTopCardBase@@UAEXXZ @121 ; ?SetClkSrc@CTopCardBase@@UAEXXZ
?SetClkmode@CTopCardBase@@UAEHHK@Z @122 ; ?SetClkmode@CTopCardBase@@UAEHHK@Z
?SetCpl@CTopCardBase@@UAEHHH@Z @123 ; ?SetCpl@CTopCardBase@@UAEHHH@Z
?SetDAOut@CTopAcqSys@@QAEHHHPAG@Z @124 ; ?SetDAOut@CTopAcqSys@@QAEHHHPAG@Z
?SetDAOut@CTopCardBase@@UAEHHPAG@Z @125 ; ?SetDAOut@CTopCardBase@@UAEHHPAG@Z
?SetDlyLength@CTopCardBase@@UAEHHJ@Z @126 ; ?SetDlyLength@CTopCardBase@@UAEHHJ@Z
?SetExternClkV@CTopCardBase@@UAEHHN@Z @127 ; ?SetExternClkV@CTopCardBase@@UAEHHN@Z
?SetFilter@CTopCardBase@@UAEHHH@Z @128 ; ?SetFilter@CTopCardBase@@UAEHHH@Z
?SetFreq@CTopCardBase@@UAEXXZ @129 ; ?SetFreq@CTopCardBase@@UAEXXZ
?SetTBTrg@CTopCardBase@@UAEHHPAUTBtrginfo@@@Z @136 ; ?SetTBTrg@CTopCardBase@@UAEHHPAUTBtrginfo@@@Z
?SetTB_All@CTopCardBase@@UAEXXZ @137 ; ?SetTB_All@CTopCardBase@@UAEXXZ
?SetTrg@CTopCardBase@@UAEXXZ @138 ; ?SetTrg@CTopCardBase@@UAEXXZ
?SetUnitstr@CTopCardBase@@UAEHHPAD@Z @139 ; ?SetUnitstr@CTopCardBase@@UAEHHPAD@Z
?Setgo@CTopCardBase@@UAEXXZ @140 ; ?Setgo@CTopCardBase@@UAEXXZ
?writegain@CTopAcqSys@@QAEXHEE@Z @162 ; ?writegain@CTopAcqSys@@QAEXHEE@Z
?writegain@CTopCardBase@@UAEXHEE@Z @163 ; ?writegain@CTopCardBase@@UAEXHEE@Z
?writezero@CTopAcqSys@@QAEXHEE@Z @164 ; ?writezero@CTopAcqSys@@QAEXHEE@Z
?writezero@CTopCardBase@@UAEXHEE@Z @165 ; ?writezero@CTopCardBase@@UAEXHEE@Z
Acq_ @7 ; Acq_
GetSysNum_ @3 ; GetSysNum_
HardwareSetEx_ @25 ; HardwareSetEx_
HardwareSet_ @6 ; HardwareSet_
IO_In_ @19 ; IO_In_
IO_Out_ @20 ; IO_Out_
IO_Select_ @18 ; IO_Select_
MTrg_ @9 ; MTrg_
OpenTopdll @1 ; OpenTopdll
Pack2CHEx_ @28 ; Pack2CHEx_
PackEx_ @26 ; PackEx_
Pack_ @12 ; Pack_
SendHandle @2 ; SendHandle
SetDAOut_ @27 ; SetDAOut_
StatusCheck_ @10 ; StatusCheck_
StopAcq_ @8 ; StopAcq_
SysInit_ @5 ; SysInit_
TopAcqManager @24 ; TopAcqManager
readgain_ @17 ; readgain_
readzero_ @16 ; readzero_
writegain_ @15 ; writegain_
writezero_ @14 ; writezero_
原来dll中的函数好像有的用__stdcall,有的函数没用 如:
typedef int (__stdcall*lpfnOpenTopDll)();
typedef int (*lpfnSendHWND)(HWND);
这时怎么处理?
用-a还是不用-a,这是由你定义的库导出的接口声明约定来确定的,bcb用的一般是__fastcall,如果你的vc的声明约定为__stdcall那就不用-a
那就看你用到的函数接口声明是什么样子咯
你就干脆动态调用
load
getprecess
也不需要对方的头文件,只要知道函数的定义和准确函数名称就可以了
void __fastcall TForm1::Button4Click(TObject *Sender)
{
typedef int (__stdcall*lpfnOpenTopDll)();
lpfnOpenTopDll pOpenTopDll;
typedef int (*lpfnSendHWND)(HWND);
lpfnSendHWND pSendHWND;
HINSTANCE hInstTopdll;
hInstTopdll=LoadLibrary("TdecApi.dll");
if (hInstTopdll)
{
pOpenTopDll=(lpfnOpenTopDll)GetProcAddress(hInstTopdll, "OpenTopdll");
int SysNum=pOpenTopDll();
pSendHWND=(lpfnSendHWND)GetProcAddress(hInstTopdll, "SendHandle");
pSendHWND(this->Handle);
}
FreeLibrary(hInstTopdll);
hInstTopdll = NULL;
}
你新建一个空白工程,这段代码肯定可以编译通过
void __fastcall TForm1::Button4Click(TObject *Sender)
{
typedef int (__stdcall*lpfnOpenTopDll)();
lpfnOpenTopDll pOpenTopDll;
typedef int (*lpfnSendHWND)(HWND);
lpfnSendHWND pSendHWND;
HINSTANCE hInstTopdll;
hInstTopdll=LoadLibrary("TdecApi.dll");
if (hInstTopdll)
{
pOpenTopDll=(lpfnOpenTopDll)GetProcAddress(hInstTopdll, "OpenTopdll");
int SysNum=pOpenTopDll();
pSendHWND=(lpfnSendHWND)GetProcAddress(hInstTopdll, "SendHandle");
pSendHWND(this->Handle);
}
FreeLibrary(hInstTopdll);
hInstTopdll = NULL;
}
void __fastcall TForm1::Button4Click(TObject *Sender)
{
typedef int (__stdcall*lpfnOpenTopDll)();
lpfnOpenTopDll pOpenTopDll;
typedef int (*lpfnSendHWND)(HWND);
lpfnSendHWND pSendHWND;
HINSTANCE hInstTopdll;
hInstTopdll=LoadLibrary("TdecApi.dll");
if (hInstTopdll)
{
pOpenTopDll=(lpfnOpenTopDll)GetProcAddress(hInstTopdll, "OpenTopdll");
int SysNum=pOpenTopDll();
pSendHWND=(lpfnSendHWND)GetProcAddress(hInstTopdll, "SendHandle");
pSendHWND(this->Handle);
}
FreeLibrary(hInstTopdll);
hInstTopdll = NULL;
}
c++builder6.0中调用是吧,我没有立即错误吧
TdecApi.def
ClsTopDll.cpp
ClsTopDll.h
这3个文件完全可以不要添加到工程里
是不是缺少vc相关的dll文件,
提示程序已破坏
你能跟踪代码吧,调试一下,上面22行代码,哪一行报的错
是不是缺少vc相关的dll文件,
提示程序已破坏
你能跟踪代码吧,调试一下,上面22行代码,哪一行报的错
还是15行直接报错,“程序已被破坏,请重新安装”
是不是缺少vc相关的dll文件,
提示程序已破坏
你能跟踪代码吧,调试一下,上面22行代码,哪一行报的错
还是15行直接报错,“程序已被破坏,请重新安装”
哥们,按理说动态调用应该是可以的,只要你把关联的dll也拷贝过来,能找到对应调用地址就可以了
你就干脆动态调用
load
getprecess
动态调用不行,我一开始就是用的动态调用,VC的dll和bcb的不兼容
是不是缺少vc相关的dll文件,
提示程序已破坏
你能跟踪代码吧,调试一下,上面22行代码,哪一行报的错
还是15行直接报错,“程序已被破坏,请重新安装”
哥们,按理说动态调用应该是可以的,只要你把关联的dll也拷贝过来,能找到对应调用地址就可以了
请问dll中的函数名怎么搞?不是说BCB和VC中调用的函数名会不一致吗?我用tdump.exe -ee 发现我要调用的几个函数名居然没有变化!!!这事什么情况?
int SysNum=pOpenTopDll();
if(pOpenTopDll != NULL)
{
int SysNum=pOpenTopDll();
}
else
{
ShowMessge("function not find";
return;
}
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。