如何在运行时检索存储在Windowsexe/dll中的版本信息?此信息是使用资源文件手动设置的。 最佳答案 这是使用标准WindowsAPI函数的C++方法:try{TCHARszFileName[MAX_PATH];if(!::GetModuleFileName(0,szFileName,MAX_PATH))throw__LINE__;DWORDnParam;DWORDnVersionSize=::GetFileVersionInfoSize(szFileName,&nParam);if(!nVersionSize)throw__
如果我有一个名为“foo.dll”的dll,最终用户将其重命名为“bar.dll”。调用LoadLibrary后,如何从我的dll中获取名称“bar.dll”?是GetModuleFileName(hModule,buffer);? 最佳答案 是的,您需要将hModule存储在DllMain中BOOLWINAPIDllMain(HINSTANCEhinstDLL,DWORDfdwReason,LPVOIDlpvReserved){switch(fdwReason){caseDLL_PROCESS_ATTACH:hModule=hin
我使用的是VisualStudio2008SP1forC++。编译时,VisualStudio需要选择应用程序应链接哪个版本的CRT和MFCDLL,版本9.0.21022.8(=RTM)、9.0.30729.17(=SP1)或9.0.30729.4148(=SP1带安全更新).我想知道您如何选择要链接的两个版本中的哪一个。有人知道吗?注意:这在使用privateassembly时很重要,因为您需要知道要与.exe一起复制哪些版本的VC9.0DLL。注意_BIND_TO_CURRENT_VCLIBS_VERSION标志仅确保正确的版本包含在list中。运行时的DLL版本选择显然不是根据l
因此,为DLL定义导出/导入的常见(至少VS2005状态)方式是:#ifdefMY_EXPORTS#defineMY_API__declspec(dllexport)#else#defineMY_API__declspec(dllimport)#endifclassMY_APIMyClass{...};如果我只是将我的代码构建为DLL,这非常有用。但是,我希望可以选择使用静态库或DLL。现在一个明显(但很糟糕)的解决方案是复制所有代码,删除DLL“MY_API”定义。现在看来更好的方法是通过命令行切换来定义或不定义DLL内容。但是,如果是静态库,“MY_API”应该是什么?#ifdef
目前我有类似这样的免注册COM设置:a.exe(依赖b.dll;不直接依赖c.dll)a.exe.manifest(声明c.dll的免注册COM注册)b.dll(依赖于c.dll。例如,.NETTMBIMP生成的COM包装器)c.dll(一些COM实现DLL)c.dll.manifest(c.dll的免注册COMlist)是否可以更改此方案,将a.exe上的list改为放在b.dll上?我希望其他程序能够引用b.dll,而不必尽可能在任何地方添加额外的list。(a.exe.manifest有这个内容:)和c.dll.manifest是使用list工具mt.exe生成的。(这里太长了)
我正在尝试将rubyFiddle标准库用于WindowsAPI以运行shellcode代码的思路是拥有可执行任何操作的原始十六进制shellcode(例如MessageBoxA)调用kernel32.dll为这个shellcode分配一block内存。虚拟分配为这个shellcode创建一个缓冲区将shellcode移至该分配区。RtlMoveMemory创建一个新线程来执行该shellcode。创建线程等待执行/线程结束。WaitForSingleObject代码如下:require'fiddle'require'fiddle/import'require'fiddle/type
我正在尝试使用mkbundle将我的C#应用程序(.exe)与其依赖的dll、nativedll和所需的.net程序集捆绑到单个exe。那么,首先是否可以使用monomkbundle来做到这一点?如果是,当我尝试使用命令时C:\MyProjDir>mkbundle-oBundleName--depsOriginalAppName.exe编译时as-otemp.otemp.s我得到错误:'as'isnotrecognizedasaninternalorexternalcommand,operableprogramorbatchfile.[Fail]我发现某个地方需要安装gcc、gcc-m
如果我在DLL中导出函数,函数名称的长度是否有限制? 最佳答案 使用Microsoft编译器时,导出的C++类的函数名称限制为4096。说明here.通过实验发现,对于C导出的函数也有同样的限制。 关于windows-DLL中函数名称的最大长度,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/12636506/
我正在开发一个包含不同组件的C++项目。我们需要将应用程序作为Windows服务启动。该项目是非托管C++代码。我编写了一个C#windows服务和一个C风格的dll,它具有启动不同组件的功能,以及另一个停止它们的功能。dll有两个文件,一个头文件和一个.cpp文件:RTSS.h:namespacePFDS{extern"C"__declspec(dllexport)intrunRTS(char*);}RTSS.cpp:usingnamespacePFDS;/*...includesanddeclarations*/extern"C"__declspec(dllexport)intru
我对从DLL内部创建的表单有一个小问题。基本上,当显示来自dll的表单(Form1)(我认为它必须保持在顶部)并且您打开另一个与主应用程序分开的表单(Form2)(即不在内部)时,会发生什么dll)。如果将光标放在Form2上的控件上以显示提示,则Form2将立即移到Form1后面。只有当MainFormOnTaskBar为true时才会发生这种情况。目前我们正在将主应用程序的Application.Handle传递给DLL,并将其分配给DLL的Application.Handle。我已设法通过将Application.MainForm.Handle传递给DLL以分配给DLL中的App