读书人

调用自己的dll出现异常

发布时间: 2012-04-06 12:22:24 作者: rapoo

调用自己的dll出现错误
我用bcb的new/dll wizard
source 类型我选择了c++
use VCL 打勾

dll程序这样的
#include <vcl.h>
#include <windows.h>
#pragma hdrstop
#pragma argsused

extern "C " __declspec(dllexport) int __cdecl OpenPort(char port);

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{


return 1;
}
//-----------------------------------
int OpenPort(char port)
{
}
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
我自己调用dll


#include <vcl.h>
#pragma hdrstop

#include "Unit1.h "
//-----------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm "

int __stdcall (*useport)( char port);
HINSTANCE HmyDLL;

TForm1 *Form1;
//-----------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
HmyDLL=LoadLibrary( "comdll.dll ");
}
//----------------------------------

void __fastcall TForm1::FormDestroy(TObject *Sender)
{
FreeLibrary(HmyDLL);
}
//-----------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{

FARPROC P;
if(HmyDLL!=NULL)
{
P=GetProcAddress(HmyDLL, "OpenPort ");
if(P==NULL)
{
ShowMessage( "打开OpenPort()函数错误! ");
}
else
{
////第六步:强制类型转换,即将所获取的函数地址强制转换为函数
useport=(int __stdcall (__cdecl *)( char port))P;
////第七步:函数调用
useport(1) ;
}
}
else
{
ShowMessage( "打开动态链接库文件comdll.dll错误! ");
}
}
一编译,,就ShowMessage( "打开OpenPort()函数错误! ");
断点一下,,
LoadLibrary没问题,,但是P没值


这个调用,windows的dll都没问题。
为什么调用自己的出现问题,
谁帮看看




[解决办法]
__cdecl
改成
__stdcall

读书人网 >C++ Builder

热点推荐