首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

调用自己的dll出现异常

2012-04-06 
调用自己的dll出现错误我用bcb的new/dllwizardsource类型我选择了c++useVCL打勾dll程序这样的#includevcl

调用自己的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

热点排行