草庐IT

DLL_EXPORT

全部标签

c++ - 需要从DLL导出纯基类?

我有两个DLL:a.dll和b.dll,每个DLL都有一个类AClass和BClass。我想让AClass和BClass继承并实现相同的接口(interface)AbsBase,这是一个纯抽象类。在每个类中,我为__declspec(dllimport)和__declspect(dllexport)设置了#defines。当我尝试编译时,我得到了这个:warningC4275:nondll-interfaceclass'AClass'usedasbasefordll-interfaceclass'AbsBase'这基本上是要我将AbsBase声明为__declspec(dllexpor

c# - SharePoint 无法在 Windows 2008 上加载 C++ DLL

我有一个SharePointDLL可以执行一些许可操作,并且作为代码的一部分,它使用外部C++DLL来获取硬盘的序列号。当我在WindowsServer2003上运行此应用程序时它工作正常,但在WindowsServer2008上整个站点(加载时加载)崩溃并不断重置。这不是WindowsServer2008R2,在64位或32位中是相同的。如果我在DLL执行之前放置一个Debugger.Break,那么我会看到代码到达中断点,然后再也不会回到DLL中。我确实从函数中收到了一些调试断言警告,同样仅在WindowsServer2008中,但我不确定这是否相关。我创建了一个运行C#DLL的控

c# - 使用非托管 C++ .dll 从 C# .exe 调用函数

所以,我有一个用C#制作的可执行文件,我没有它的源代码,但我用IDA反汇编了它,它给了我很多面向对象的汇编。我制作了一个.exe文件,将一个.dll注入(inject)到另一个.exe中,并且我将这个新的C++DLL注入(inject)到C#.exe中,没有任何问题,DLLMain被调用,所以...但是当我将这个DLL注入(inject)到一个用C++制作的普通.exe文件中时,我可以使用它的内存地址调用.exe中的一个函数,我可以在IDA上使用它。问题是,面向对象的程序集在其函数上没有地址,即使函数名称被反汇编也是如此。那么,有什么方法可以用我在C#.exe文件上注入(inject)

c++ - 在运行时加载的 dll/so 中 atexit() 的行为是什么?

如果我在运行时加载一个dll/so文件(即使用LoadLibrary()或dlopen()),C++atexit的行为是什么()函数?如果我在应用程序退出之前卸载库,它会被调用吗?我可以期望在所有平台上都有相同的行为吗?(具体来说,windows和类unix系统) 最佳答案 在Windows下:当您调用FreeLibrary时,每个dll都会执行atexit函数链。重要的是要注意dll以未指定的顺序卸载,因此不要添加依赖于其他dll全局变量的atexit处理程序。这是更多信息链接:http://msdn.microsoft.com/

c++ - 使用 Windows .dll 中的 SWIG 包装函数

我在使用通过SWIG接口(interface)导出的.dll共享库中的函数时遇到问题。VersionInfoPython:2.6.4Swig:2.0.4大图是:我有一些代码在Linux下使用C++开发并使用SWIG包装。我在Linux下将C++源代码编译成.so对象,并在Python中使用.so库。现在,我需要将所有这些功能迁移到Windows,Windows中.so的等价物是.dll。因此,我打算将所有的C++源代码编译成一个.dll并通过Python访问它们。所以正常的过程是:拥有C++源代码->使用SWIG包装它们->编译成.dll->通过Python访问。有一个巨大的.cxx源

c++ - LabVIEW、C++ DLL 和 IMAQ 图像

我熟悉编写可从LabVIEW调用的DLL,但我很好奇将IMAQ图像传递到DLL的正确方法是什么。这是我发现的一种方法——我也使用类似的机制将IMAQImage实例从我的DLL发布到事件结构。请注意,将图像实例与集群相互转换的节点位于${LABVIEW_INSTALL_DIR}/vi.lib/vision/DatatypeConversion.llb,并命名为IMAQImageDatatypetoImageCluster.vi和IMAQImageClustertoImageDatatype.vi,分别。创建的簇由图像名称和一个整数值组成,该整数值表示指向C/C++中的Image*类型的指

c++ - 使用 Code Cave 注入(inject) 64 位 DLL

我正在尝试将64位DLL注入(inject)64位进程(该问题的探索者)。我已经尝试使用Remote-thread\WindowHooks技术,但一些反病毒软件将我的加载程序检测为误报。看完这篇文章:DllInjectionbyDarawk,我决定使用代码洞穴。它适用于32位,但由于VS不支持64位的内联汇编,我不得不明确地编写操作码和操作数。我看了这篇文章:64Bitinjectionusingcodecave,如文章所述,存在一些差异:Thereareseveraldifferencesthathadtobeincorporatedhere:MASM64usesfastcall,s

c# - 处理从 c++ dll 返回到 C# 的数组

我在用C++创建的dll中有这个extern"C"__declspec(dllexport)char*__stdcallhh(){chara[2];a[0]='a';a[1]='b';return(a);}这就是我尝试在C#中处理代码的方式[DllImport(@"mydll.dll",CharSet=CharSet.Ansi,CallingConvention=CallingConvention.StdCall)]publicstaticexternIntPtrhh();staticvoidMain(string[]args){IntPtra=hh();//Howtoproceedh

c++ - dll 在 Debug模式下,在 Release模式下调用程序(反之亦然)

我正在编写一个小的C++程序来测试Cdll,其中包含一些函数。这些dll存在于调试版本和发布版本中,我想用同一个程序加载它们并将它们与以前的版本进行比较。问题是,当我用releaseconfig编译我的程序时,它只能使用同样是release的dll,而当我使用debugconfig编译程序时,它只能使用同样是debug的dll。我使用LoadLibrary和GetProcAddress函数加载dll/函数。有两种类型的函数:voidtype1(int&)和voidtype2(vector*).无论配置如何,类型1都可以正常工作。但类型2只有在配置匹配时才有效。代码:typedefvoi

c++ - 跨 DLL 边界使用单例

这个问题在这里已经有了答案:C++asingletonclasswithdll(3个答案)关闭3年前。我有一个遗留项目,它有一个像这样的单例类:classSingleton{public:staticSingleton&Instance(){staticSingletoninst;returninst;}voidfoo();};该项目使用了一个DLL,它需要使用相同的类(部分源代码在托管应用程序和DLL之间共享,因此DLL可以访问Singleton)。但是,Instance(自然地)为DLL返回一个不同的实例,为宿主应用程序返回一个不同的实例。这显然会导致问题。有没有办法在DLL和宿主