【发布时间】:2016-02-29 08:47:32
【问题描述】:
我在 RAD studio Seatle C++ Builder 中创建了 DLL 项目,并选中了“与运行时包链接”复选框并添加到项目选项 -> C++ 链接器 -> 附加选项“midas.lib”
这样的DLL项目的“运行时包导入库”。
adortl;appanalytics;bcbie;bcbsmp;bindcomp;bindcompdbx;bindcompfmx;bindcompvcl;bindengine;CloudService;compont1;compont4;CustomIPTransport;DataSnapClient;DataSnapCommon;DataSnapConnectors;DatasnapConnectorsFreePascal;DataSnapFireDAC;DataSnapIndy10ServerTransport;DataSnapNativeClient;DataSnapProviderClient;DataSnapServer;DataSnapServerMidas;db ; dbrtl; dbxcds; DbxClientDriver; DbxCommonDriver; DBXDb2Driver; DBXFirebirdDriver; DBXInformixDriver; DBXInterBaseDriver; DBXMSSQLDriver; DBXMySQLDriver; DBXOdbcDriver; DBXOracleDriver; DBXSqliteDriver; DBXSybaseASADriver; DBXSybaseASEDriver; dsnap; dsnapcon; dsnapxml; emsclient; emsclientfiredac; FireDAC; FireDACADSDriver; FireDACASADriver; FireDACCommon; FireDACCommonDriver ;FireDACDb2Driver;FireDACDBXDriver;FireDACDSDriver;FireDACIBDriver;FireDACInfxDriver;FireDACMongoDBDriver;FireDACMSAccDriver;FireDACMSSQLDriver;FireDACMySQLDriver;FireDACODBCDriver;FireDACOracleDriver;FireDACPgDriver;FireDACSqliteDriver;FireDACTDataDriver;fmx;fmxase;fmxdae;fmxFireDAC;fmxobj;F MXTee;FmxTeeUI;GifImagePack;ibmonitor;ibxbindings;ibxpress;IndyCore;IndyIPClient;IndyIPCommon;IndyIPServer;IndyProtocols;IndySystem;inet;inetdb;inetdbxpress;Intraweb;Package5;RESTBackendComponents;RESTComponents;rtl;soapmidas;soaprtl;soapserver;svn;Tee; TeeDB;TeeUI;tethering;TgrfButton;Utils;vcl;vclactnband;vcldb;vcldsnap;vclFireDAC;vclib;vclie;vclimg;VCLRESTComponents;vclribbon;VclSmp;vcltouch;vclwinx;vclx;xmlrtl
我正在像这样在 EXE 中加载这个 DLL。
LoadLibrary(L"MyDll.dll");
当我调试 DLL 时,没有调用 DllEntryPoint 方法。
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
当我删除 midas.lib 或调用任何 .lib DllEntryPoint 时。
我不理解不同
有什么想法吗?
【问题讨论】:
-
会不会,你的DLL入口函数设置为
DllMain? -
一个非常粗略的猜测是 midas.lib 实际上是一个静态库而不是导入库。并且它还包含一个 DllEntryPoint 函数。给定两者之间的选择,链接器选择它首先遇到的任何一个。不容易修复。
-
当我将 adortl.lib 添加到调用 DllEntryPoint 的“附加选项”中时。但是如果我添加 midas.lib 不会调用。我不明白 adortl 和 midas 之间的关系。
-
Midas.lib 可能是 midas.dll 的导入库。如果链接到 midas.dll,则必须将其与 DLL 一起部署,否则 LoadLibrary() 将无法在调用 DllEntryPount() 之前将 DLL 加载到内存中。如果您不想部署 midas.dll,则必须通过链接到 midaslib.dcu 将整个 midas 库静态链接到您的 DLL。在 Google 上搜索如何在 C++Builder 中执行此操作,有可用的解决方案。
-
感谢@RemyLebeau 的详细回复。我了解问题的根源。
标签: winapi dll c++builder c++builder-10-seattle