【问题标题】:Why not call DllEntryPoint in C++ Builder?为什么不在 C++ Builder 中调用 DllEntryPoint?
【发布时间】: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


【解决方案1】:

midas.lib 不需要添加。因为 dsnap 已经添加了。

我从附加选项(C++ 链接器)中删除了 midas.lib

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 2010-11-06
    相关资源
    最近更新 更多