草庐IT

java - 如何使用 gcc 编译器或其他编译器生成 64 位 .dll。无法在 AMD 64 位平台上加载 IA 32 位 .dll

您好,我没有找到如何创建64位dll的解决方案。并使用它的原生C++方法。我使用Java代码metodynatywne.java:classmetodynatywne{static{System.loadLibrary("metodynatywne");}nativepublicvoidsayHello();publicstaticvoidmain(Stringargv[]){newmetodynatywne().sayHello();}}然后生成metodynatywne.h使用javah-jnimetodynatywne我写了metodynatywne.cpp代码:#include

c++ - 跨 DLL/共享库使用命名空间

我正在编写一个带有辅助函数的共享库/DLL。所以我声明namespace,以免将来发生名称冲突。对于类,这很好用,但我有一些全局函数,我也想将它们放在命名空间中,但这不起作用。当我尝试寻址命名空间时出现链接器错误。看起来好像无法从DLL中导出命名空间。我用谷歌搜索并在此处找到此线程WhereshouldIputmyDECLSPECforanamespace?我真的不明白答案。命名空间的要点是分隔名称并使它们具有唯一可识别性,所以我想知道为什么说不需要导出命名空间是一个可以接受的答案。但是,也许我在这里遗漏了一些东西。我可以看到它自己的命名空间不能导出,但里面的函数应该仍然属于命名空间,

c++ - 什么时候加载 DLL : Implicit Linking VS Explicit Linking

我认为隐式链接会在应用程序启动时立即加载DLL,因为它也称为“加载时动态链接”。但是我在下面的链接中发现了一些奇怪的解释(https://msdn.microsoft.com/en-us/library/253b8k2c(VS.80).aspx)。隐式链接Liketherestofaprogram'scode,DLLcodeismappedintotheaddressspaceoftheprocesswhentheprocessstartsupanditisloadedintomemoryonlywhenneeded.Asaresult,thePRELOADandLOADONCALLc

由于找不到msvcr90.dll无法继续执行代码的5个修复方法

msvcr90.dll是MicrosoftVisualC++2008Redistributable软件包中的一个库文件,它是用于在Windows操作系统上运行C++应用程序的重要文件之一。当我们电脑系统中的msvcr90.dll丢失或者损坏了,就会导致很多软件跟游戏无法打开运行,会提示“由于找不到msvcr90.dll无法继续执行代码”。我们需要怎么修复呢? 找不到msvcr90.dll的四个主要原因:损坏的msvcr90.dll文件:如果msvcr90.dll文件被损坏,则系统无法找到该文件。这可能是由于病毒感染、硬盘故障、不当的软件安装或其他原因导致的。旧版本的msvcr90.dll文件:

c++ - 将 DLL C++ 类库移植到 Visual Studio 的问题

我用C++编写了一个类库,并在Linux中使用g++作为共享对象成功编译了它,然后创建了一些使用它的应用程序。现在我必须将它移植到VS2008。我为所有类提供了所需的__declspec(dllexport)前缀,然后尝试对其进行编译。我收到一堆警告,基本上与以下内容有关:我的自定义异常类,派生自std::runtime_error,它产生:“警告C4275:非dll接口(interface)类‘std::runtime_error’用作dll接口(interface)类‘cci::FileOperationException’的基础”。我应该如何使标准库类dll可导出?成员函数声明中

c++ - 非模板类中模板方法中的dll和静态变量

我花了几天时间搜索我的问题,但找不到任何可行的解决方案。我有一个名为ServiceEventHub的类,它负责在我的应用程序中调度事件。该代码的灵感来自于我在网上找到的实现事件聚合器的内容。该应用程序是一个插件引擎,可动态加载不同的dll(插件)。此类是由驻留在应用程序(.exe)中的引擎提供的服务。问题在于该类依赖于静态变量来跟踪发出和注册的不同“事件”。(事件只是在通用头文件中定义的结构)。据我了解,由于Windows上默认不导出符号这一事实,静态变量在应用程序和dll中不是相同的实例。正如您所想象的,引擎和插件之间的“事件类型”并不相同,并且它的行为与预期不同。这是我第一次在Wi

c++ - 避免包装器 DLL 中的堆栈溢出

我有一个要添加全屏后处理效果的程序。我没有该程序的源代码(它是专有的,尽管开发人员确实向我发送了调试符号的拷贝,.map格式)。我已经编写并运行了效果代码,没问题。我现在的问题是将两者联系起来。到目前为止,我尝试了两种方法:使用Detours修改原程序的导入表。这很好用并且保证稳定,但我与之交谈过的用户对此并不满意,它需要安装(除了提取存档之外),并且根据条款使用Detours修补程序是否有效存在一些问题最终用户许可协议(protocol)。因此,该选项已被淘汰。另一种选择是传统的DLL替换。我已经包装了OpenGL(opengl32.dll),我需要程序来加载我的DLL而不是系统拷贝

c++ - 将 python + numpy 代码嵌入到 C++ dll 回调中

我是python嵌入的新手。我正在尝试将python+numpy代码嵌入到C++回调函数中(在dll中)我面临的问题如下。如果我有:Py_Initialize();//somepythonglue//pythoninvocationPy_Finalize();一切正常。但如果我有:Py_Initialize();_import_array();//toinitializenumpyC-API//somepythonglue+numpyarrayobjectcreation//pythoninvocationviaPyObject_CallObject()Py_Finalize();它在

c++ - 将 Q_DECLARE_METATYPE 与可能被多次加载的 DLL 一起使用

将Qt4.8与C++结合使用。我正在使用在运行时加载和卸载的应用程序插件。在应用程序的生命周期中,同一个插件可能会被加载多次。其中一个插件对需要存储在QVariant中的某些类型使用Q_DECLARE_METATYPE。稍后重新加载插件时,旧声明仍指向现在卸载的库的原始内存空间。当Qt尝试从重新声明的元类型创建QVariant时,这会导致访问冲突。我们已经处理了qRegisterMetaType()的类似问题:我们在加载库时注册元类型,并在卸载库之前注销这些类型。不幸的是,在声明而不是注册元类型时,这似乎不是一个选项。我们如何有效处理声明元类型的库被多次加载和卸载的情况?

c++ - 在 .NET 中捕获非托管 dll 异常

我正在使用一个带有抛出std::exception函数的非托管DLL。我正在使用.NETDLL包装器,因此可以分发它以在.NET程序中使用。我希望能够从native异常中捕获消息,但我得到的只是System.Runtime.InteropServices.SEHException("Externalcomponenthasthrownanexception.")有什么方法可以传播异常详细信息吗?也许我应该从nativeDLL导出自定义异常?我该怎么做?谢谢nativeDLL:__declspec(dllexport)void__stdcallW32DLLFunc(intparam){i