我正在尝试将一些旧的MSVCC++代码移植到MinGW/GCC。一个问题是项目严重依赖/DELAYLOAD选项来获取并不总是使用的函数,以及运行时正确的dll所在的位置。MinGW/GCC上有类似的选项吗?这段代码是针对windows平台的。 最佳答案 我要补充一点,虽然延迟加载DLL看起来是Windows操作系统的一部分,但它们实际上是根据链接器生成的小stub来实现的。至少,过去是这样。因此,在Windows操作系统级别没有正式的“延迟加载”概念。有一个约定,基于链接器发出的二进制代码。
我有一个应用程序,其GUI是用C#编写的,逻辑是用C++DLL编写的。DLL应打开一个文件以从中读取数据。我在与DLL相同的文件夹中有data.txt文件。当我打电话fopen("data.txt","r")返回值为NULL。可能是什么问题呢?请在这方面帮助我。谢谢,拉克什。 最佳答案 dll文件的位置无关紧要。您打开的路径必须包含完整路径,否则文件将打开到您的应用程序当前工作目录。 关于c++-无法从C++DLL打开文件,我们在StackOverflow上找到一个类似的问题:
我有一个相当大的Core项目,我正在尝试调整它以使用我构建的DLL引擎,我遇到了一堆错误,例如:未解析的外部符号“私有(private):静态类”当在DLL中包含来自核心的一些header时,该类通过__declspec(dllexport)导出,但任何具有静态成员的header都会抛出大量关于静态成员的错误。这是一个相当大的项目,我不能跑来跑去删除我看到的每个静态类成员,有没有这种东西?正在导入的类的基本示例:class__declspec(dllexport)MyClass{public:staticboolm_someVar;}为了清楚起见,我只想说明m_someVar是在类实现
我有一个作为C++Win32应用程序创建的DLL。为了防止在我的DLL中出现名称混淆,我使用了下面定义的EXPORT定义:#ifndefEXPORT#defineEXPORTextern"C"__declspec(dllexport)#endifEXPORTint_stdcallSteadyFor(doublePar[],doubleInlet[],doubleOutlet[]);为了编译这段代码,我必须进入项目的属性并将C/C++CallingConvention设置为__stdcall(/Gz)并设置CompileAs到CompileasC++Code(/TP)。这在Debug模式
我有一个DLL,我使用SetWindowsHookEx注入(inject)到其他进程中。在DLL中,我通过调用GetModuleHandleEx来增加模块的引用计数器,这样我就可以控制何时卸载模块。此时,来自这两个API调用的模块引用计数“应该”为2。当调用进程关闭时,它调用UnhookWindowsHookEx,将引用计数递减为1。DLL有一个线程等待一些事情,其中之一是调用的进程的句柄>设置WindowsHookEx。当进程消失时,DLL会进行一些清理,终止所有线程,清理内存和句柄,然后调用FreeLibraryAndExitThread。这会递减计数器并卸载DLL。这是我的问
我在VisualStudio中编写了一个C++类库,它只定义了一个调用某些Python的函数:#pragmaonce#includeextern"C"__declspec(dllexport)voidpython(){Py_Initialize();PyRun_SimpleString("2+2");}我在同一解决方案中创建了另一个项目,即C#BlankUniversal应用程序。我尝试引用我之前提到的项目生成的DLL:usingSystem;...namespaceStartupApp{...sealedpartialclassApp:Application{privateconst
我正在使用旧文件格式。该文件是使用使用WinBase.hCreateFile()和WriteFile()函数(在kernel32.dll中找到)的非托管C++创建的。我一直在使用P/Invoke互操作来访问这些native函数,如下所示:[DllImport("kernel32.dll")]publicstaticexternboolWriteFile(IntPtrhFile,byte[]lpBuffer,uintnNumberOfBytesToWrite,outuintlpNumberOfBytesWritten,[In]refNativeOverlappedlpOverlapped
我使用的是VisualStudio2008Professional,我需要创建包含两个项目的解决方案。第一个项目是托管WinFormsC#项目,第二个是非托管DLLC++项目。我在VS2008中创建了它们,在非托管DLL项目中我导出了返回一些int的简单函数。在托管WinForms项目中,我以通常的方式导入DLL并尝试在标签中打印返回值:[DllImport("DllProj.dll",EntryPoint="GetSomeInt",SetLastError=true)]privatestaticexternintGetSomeInt();但是当我构建解决方案并运行时,我得到了DllN
我一直在处理的一个DLL最近变大了很多。是否有任何工具可以告诉我对此负责的是什么?例如,它是实例化次数过多的模板,还是第3方库,或者是boost?我正在寻找一种关注大小而不是性能的分析器。 最佳答案 您是在谈论DLL的字节大小吗?尝试使用dumpbin实用程序。这可以向您显示DLL中的内容。/ARCHIVEMEMBERS应该向您展示各个对象模块。http://support.microsoft.com/kb/177429 关于c++-如何找出我的DLL增长如此之多的原因,我们在Stack
我开发了一个Win32DLL,在下面提供了详细信息,并想为函数Connnect和LogOut创建一个CLI/C++包装器。我知道可以从DLL导出整个类和函数。classCClientLib{public:CClientLib(void);//TODO:addyourmethodshere.__declspec(dllexport)boolConnect(char*strAccountUID,char*strAccountPWD);__declspec(dllexport)voidLogOut();private:Account::RefUserAccount;voidset_Activ