jjzjj

c++ - 使用 Maven NAR 插件在 Windows 上链接 DLL

我正在尝试使用MavenNAR插件构建一个非常简单的C++程序。我已经设置了一个用于构建共享库的Maven模块,以及另一个用于链接库并构建使用它的可执行文件的模块。在Mac上构建效果很好,我可以运行该程序。不幸的是,在Windows(XP)上使用MSVisualC++(免费版)构建失败并出现链接器错误。两台机器(操作系统和编译器除外)之间配置的唯一区别是我在Windows机器上使用Maven构建之前运行vcvars32.bat。这是我收到的错误:main.obj:errorLNK2019:unresolvedexternalsymbol"public:int__thiscallCalc

windows - 如何重新分配 Gdiplus (GDI+)?

我需要使用我的应用程序重新分发gdiplus.dllv.1.1,并确保使用这个特定版本。例如。WindowsXP有系统版本的gdiplus.dll但不能升级(v.1.0)。但是如果我把我的gdiplus.dll放到应用程序文件夹中,系统仍然使用。为什么?如何解决?MSDNsays:IfyouareredistributingGDI+toadownlevelplatformoraplatformthatdoesnotshipwiththatversionofGDI+natively,installGdiplus.dllinyourapplicationdirectory.Thisputs

windows - 如何在使用 Visual C++ 2010 命令提示符时包含/链接 DLL

我正在尝试在VC++2010命令提示符下编译一个DLL,我正在使用的函数之一在urlmon.dll中。如何将此DLL链接到我的源文件?(这只是一个.cpp文件)。我尝试将dll放在同一个文件夹中。我需要lib文件吗?目前我正在运行:cl-LD文件名我试过谷歌搜索,但没有成功。感谢那些看过的人。 最佳答案 您必须链接导入库urlmon.lib。直接链接到DLL是不可能的。(在没有该DLL的“导入库”的情况下,从DLL中获取函数的唯一其他方法是使用LoadLibrary和GetProcAddress等函数来查找、加载和提取所需的特定函数

c - JNA 简单函数调用适用于 linux (x64) 但不适用于 Windows (x86)

我正在尝试使用JNA从Java运行以下C函数,但我在x86windows(DLL)而不是x64linux(.SO)上收到错误(无效内存访问)。c函数char*testcopy(char*out,char*in){strcpy(out,in);free(in);returnout;};C测试:适用于两个平台(EclipseCDT/MVC++)通过linux共享库或windowsdll暴露函数,直接在C中调用,结果OK。...charout[10];char*res;char*in=(char*)malloc(3*sizeof(char));strcpy(in,"ab");res=test

windows - 64 位 dll 寄存器

我已经使用x64构建将32位COMdll转换为64位dll。我尝试注册这个64位dll到64位Windows2008服务器uisngC:windows\system32regsrv32.exe中。但是我收到一条错误消息“Dllregister服务器失败,错误代码为0x80029c4a”。我如何在64位操作系统中注册此dll。 最佳答案 该错误代码是TYPE_E_CANTLOADLIBRARY这可能意味着调用了LoadTypeLib()在DllRegisterServer()的某处,该调用因任何原因失败。一个可能的原因是库没有添加到D

c++ - Hook ntdll.dll 调用的问题

我目前正致力于通过dll注入(inject)Hookntdll.dll调用。首先,我通过CreateRemoteThread()在现有进程中创建线程然后我通过LoadLibrary加载我的dll最后HookPROCESS_ATTACH.注入(inject)工作正常,但我想记录所有注册表和文件系统查询。问题是它无法正常工作。我决定通过PasteBin发布代码,因为代码量很大。链接在这里:http://pastebin.com/39r4Me6B我正在尝试HookZwOpenKey,然后记录关键内容,然后通过指针启动“真实”功能。函数NOpenKey被执行,但进程停止,没有任何错误。有人看到

windows - 使用mfc42.dll 作为免注册COM?

我正在使用第三方Active-X控件,该控件需要在用户系统上安装特定版本的MFC42.dll。我正在尝试为我的产品的非管理员安装添加支持,并且必须安装例如mfc42.dll到系统文件夹并注册它显然使这不可能。第三方Active-X使用manifest文件作为免注册COM,想知道是否可以对MFC42.dll和MSVCRT.DLL做同样的操作,将它们存放在应用程序文件夹中?有人试过这个吗? 最佳答案 这是不可能的。MSVCRT和MFC42.dll不是COM对象,甚至不是win32程序集,因此不能使用无注册COM访问。您可以安装mfc42

windows - 如何从 SxS 缓存中删除未卸载的 DLL

我有VS2008。我升级到VS2010,然后卸载了VS2008。我有一个在我的机器上运行的测试,但无法在构建实验室的机器上加载。经过一些调试后,我意识到测试可执行文件仍然依赖于msvcr90d.dll(这是一个VC++2008调试运行时库)。即使我已经卸载了VS2008,该测试在我的机器上仍然有效,因为该运行时DLL仍然存在于并行缓存(%windir%/winsxs)中。构建实验室机器没有DLL,因此不会在那里加载。卸载VS2008不应该导致其所有运行时DLL从并排缓存中删除吗?有没有办法可以从并行缓存中手动删除这些旧的DLL?我希望能够轻松检测到我可能仍然有过时依赖项的其他地方。

windows - FPO 数据和系统 dll

我一直在研究调用堆栈,我注意到有时我会遇到FPO帧。dbgHelp可以以某种方式找出每个帧的结束位置及其符号,但我没有DLLS的PDBS,例如kernel32等。Windows中的系统DLL是否包含FPO数据?在客户的计算机上使用我的程序时可以依赖它吗?它们是否包含任何其他调试信息? 最佳答案 如果将符号路径设置为://msdl.microsoft.com/download/symbols,则系统DLL的公共(public)符号可用。IIRC许多Windows组件都是在关闭FPO的情况下编译的。但是你到底想完成什么?您在寻找什么“调

windows - 同一系统上的 64 位和 32 位非托管 dll - 最佳实践?

我有一个内置于32位和64位的共享dll。两个版本都使用相同的名称foo.dll。如何在系统上同时安装foo.dll,以便我的32位和64位应用程序在其路径中找到正确的dll。Windows本身使用SysWOW64(用于32位dll)和System32(用于64位dll)。我想避免部署到这些文件夹。让两个位的dll在同一个盒子上共存并被链接到它们的适当应用程序找到的公认方式(如果有的话)是什么? 最佳答案 如果您不部署到受文件重定向影响的文件夹(即system32),那么您几乎需要为DLL指定不同的名称。这样做的原因是DLL搜索路径