草庐IT

DLL_EXPORT

全部标签

c# - 通过 COM 从 C++ 解决方案调试 C# dll

我有一个C++解决方案。启动项目是一个exe。在该解决方案中,有许多为COM互操作注册的C#dll(针对.NETFramework2.0)。当我在C#代码中放置一个断点时,我得到空心的红色断点"Nonativesymbolsinsymbolfile"我尝试在调用COM方法的启动项目上将ProjectPropertyPages->Debugging->DebuggerType设置为Mixed。我检查了Debug->Windows->Modules。它已加载我的dll,符号状态为"Nonativesymbolsinsymbolfile"。这不是世界末日,因为如果我执行Debug->Star

c# - P/Invoke 是否执行 DLL 然后将其关闭?

如果我使用C#来P/Invoke某个DLL,实际的C++DLL是否会在调用期间运行然后关闭,从而破坏所有使用的内存?还是.NET会在非托管“堆”中负责C++DLL使用的内存,并在我每次调用静态函数时将指向这些对象的指针指向C++DLL?当我需要某个C++项目使其内存持久化时,我是否应该创建一个ActiveX/COM服务器以使其内存持久化,并且能够从C#中调用它? 最佳答案 IfIuseC#toP/InvokeacertainDLL,willtheactualC++DLLberunforthedurationofthecallandt

c# - 如何在 Unity3D 中使用 C++ dll?

我知道thissimilarquestion,但它没有回应我的问题。我使用VisualStudio2010编写了两个.dll。一个是用C++编写的,并与用C++编写的SDK通信。另一个是该C++库的C#包装器,因此它可以在C#上下文中使用。我的计划是这样我就可以在Unity3D中使用我的代码,但显然事实并非如此。似乎Unity3D不允许我将.dll导入为Assets,如果它们不是.NET程序集。所以我可以添加我的C#包装器,但不能添加C++dll。每当我尝试访问C++库时,这都会导致DllNotFoundException。我试过简单地将C++库复制到Assets/Plugins文件夹

c++ - 如何跨 DLL 边界使用 Boost.Log?

我正在尝试整合Boost.Log在一个相当大的应用程序中,该应用程序由一个从DLL动态加载插件的主应用程序组成。最初的想法是传递一个loggingsource到插件,以便他们可以添加日志消息。但是,一旦来自DLL的代码尝试将消息记录到提供的源,应用程序就会因访问冲突而崩溃。方法一下面这个最小的例子说明了这个问题:intmain(intargc,char*argv[]){boost::log::sources::severity_logger_mtlogger;//ThisisokayBOOST_LOG_SEV(logger,boost::log::trivial::info)其中log

c++ - VS 2005 C++ 项目中的 msvcr90.dll 依赖项

我在VS2005中为nativeWin32/非托管C++创建了一个DLL项目,将其命名为myProj.dll。它依赖于第3方商业DLL,后者又依赖于msvcr90.dll(我假设它是从VS2008项目构建的)。我将其命名为thirdParty.dll。我的DLL项目在VS2005中构建得很好。我构建了一个链接到myProj.lib的测试应用程序(同样是VS2005Win32C++)。(顺便说一句,根据.lib的小尺寸以及在运行时应用程序必须找到myProj.dll的事实来判断,我猜测.lib只是调用的包装器加载实际DLL的loadLibrary();是否接近?)我的问题是,在运行时,测

c++ - 程序无法启动,因为缺少opencv_core2410d.dll

我安装了visualstudio2012。我有windows8.1。然后我在c分区中提取opencv2.4.10。创建可视化C++项目->win32控制台应用程序。因为我有x64机器buildmenu->Configurationmanager->platform->x64然后我在我的vs项目中设置以下配置。project->properties->configuration->allconfigurationVC++Directories->LibraryDirectories->C:\opencv\build\x64\vc11\bin,C:\opencv\build\x64\vc1

c++ - 无法引用库项目 (DLL),因为缺少 .lib 文件

我正在尝试启动一个C++游戏引擎项目。我对dll和lib的了解不多,但我认为引擎本身就是一个dll,我会有单独的dll项目,如引擎使用的渲染器、输入等,引擎dll将是游戏使用。我似乎在demo.exe项目中很好地引用了引擎项目(通过添加引用并添加到其他包含目录的路径)但是当我尝试在引擎dll项目中添加对渲染器dll项目的引用时,我'得到:errorLNK1104:cannotopenfile'MyPath\Renderer.lib'MyPath\LINKEngine为什么提到库? 最佳答案 许多DLL都带有相应的LIB库,仅在链接阶

c++ - 如何检测给定的 PE 文件(exe 或 dll)是 64 位还是 32 位

我需要检测给定的.dll或.exe文件是32位还是64位目前我只有一个解决方案:从指定文件中读取PEheader并从那里获取“机器”字段。(规范:MicrosoftPortableExecutableandCommonObjectFileFormatSpecification(.docx文件)在“3.3.COFF文件头(对象和图像)”部分)此字段最多可包含大约20个值。其中三个是:IMAGE_FILE_MACHINE_I386(==32bit)IMAGE_FILE_MACHINE_IA64(==64bit)IMAGE_FILE_MACHINE_AMD64(==64bit)我的问题:1)

c++ - 加载 DLL 不初始化静态 C++ 类

我有一个在运行时加载的DLL。DLL依赖于内部工作的静态变量(它是一个std::map),这个变量在DLL中定义。当我在加载后调用DLL中的第一个函数时,我从DLL中得到一个SegFault,map从未被初始化。从我从DLL加载中读到的所有内容来看,静态和全局数据初始化甚至应该在调用DLLMain之前发生。为了测试静态初始化,我添加了一个打印出一条消息的静态结构,甚至还设置了一个断点以备不时之需。staticstructa{a(void){puts("Constructing\n");}}statica;在调用DLLMain或函数之前没有消息或中断。这是我的加载代码:dll=LoadL

c++ - 运行时检查失败 #0 从 kernel32.dll 加载 QueryFullProcessImageName

我有一个应用程序需要同时在WinXP和Vista64上运行。我的程序需要QueryFullProcessImageName()才能在Vista上运行,但不能在XP上运行。我尝试通过kernel32.dll加载QueryFullProcessImageName()(而不是静态链接),以便相同的可执行文件可以在WinXP和Vista上运行。加载它的代码是://onlygetscalledonvistaboolLoadQueryFullProcessImageName(){HMODULEhDLL=LoadLibrary("kernel32.dll");if(!hDLL)return(0);/