Articles of DLL

有一个相当于-rpath连接器标志的Windows / MSVC?

在Linux / GCC上,我可以使用-rpath标志来更改共享库的可执行文件searchpath,而不用使用环境variables。 这也可以在Windows上完成吗? 据我所知,dll总是在可执行文件的目录和PATH中search。 我的场景:我想根据它们的属性(32 / 64bit / Debug / Release)将共享库放入位置,而不必考虑唯一的名称。 在Linux上,这很容易通过rpath完成,但我还没有find任何方式在Windows上做这个。 感谢任何提示!

Windowspath在带有清单的LoadLibrary中search

如果你没有path调用LoadLibrary (例如, LoadLibrary("whatever.dll") ,Windows通常会遵循其标准的searchalgorithm,它是用来findEXE的。 我的问题是这样的:假设一个应用程序清单指定了一个特定版本的系统DLL,比如comctl32.dll 6.0。 在这种情况下, LoadLibrary("comctl32.dll")会立即转到正确的并排文件夹,还是执行某种search?

MinGW / gcc:应用程序无法正确启动(0xc000007b)

我一直在使用MinGW和GNU Fortran编译器来编译Windows上的Fortran程序,这一直是一个成功的方法。 不过,我过去4天得到以下错误: The application was unable to start correctly (0xc000007b). Click OK to close the application. 错误只发生在我自己编写的应用程序上,而且我使用MinGW / gfortran组合编译。 当使用Visual Studio和iFort进行编译时,运行应用程序没有任何问题。 错误似乎是追溯的:尽pipe我没有重新编译它们,但很久以前使用gfortran编译并且完全运行的应用程序也崩溃了。 这使我认为这是一个dynamic的图书馆问题。 在线search表明,这可能是64位DLL和32位应用程序之间的兼容性问题 我正在使用Windows 7.在开始解决问题之前,我记得最近做的一件事是尝试更新MinGW; 我使用了mingw-get update和mingw-get升级命令行。 在网上浏览后,我尝试了以下修复: – 重新安装了Visual C ++运行时环境 – 重新安装.NET框架 – 下载并replace了一堆.dll像mscvr100.dll,mscvr100d.dll等… – 卸载并重新安装MinGW,以确保我有最新的gcc版本 – 在一个简单的应用程序(“Hello World!”types程序)上运行Dependency Walker 依赖Walker告诉我,找不到一些.dlls(完整列表:API-MS-WIN-APPMODEL-RUNTIME-L1-1-0.DLL,API-MS-WIN-CORE-WINRT-ERROR-L1-1 -0.DLL,API-MS-WIN-CORE-WINRT-L1-1-0.DLL,API-MS-WIN-CORE- WINRT- ROBUFFER-L1-1-0.DLL,API-MS-WIN-CORE -WINRT-STRING-L1-1-0.DLL,API-MS-WIN-SHCORE-SCALING-L1-1-1.DLL,DCOMP.DLL,GPSVC.DLL,IESHIMS.DLL)。 它也用红色突出显示了libquadmath-0.dll(libgfortran-3.dll似乎依赖于这些文件)。 的确,libquadmath-0.dll似乎是一个32位程序中间的64位DLL。 当用Dependency Walker打开.dll时,我可以看到这个库中的所有模块都是x86,除了库本身是x64(DW的CPU列)。 我不完全确定这是可能的/如何解决这个问题。 该库在Python […]

如何告诉MinGW链接器不要导出所有符号?

我正在使用MinGW工具链构buildWindowsdynamic库。 要build立这个库,我静态地链接到其他2提供了一个API,我有一个.def文件,我写了唯一的符号,我想在我的图书馆出口。 问题是GCC正在导出所有的符号,包括我链接的库中的符号。 是否有告诉链接器只是导出def文件中的符号? 我知道有选项–export-all-symbols但似乎没有相反的意思。 现在构build脚本的最后一行有这样的结构: g++ -shared CXXFLAGS DEFINES INCLUDES -o library.dll library.cpp DEF_FILE \ OBJECT_FILES LIBS -Wl,–enable-stdcall-fixup 编辑:在关于链接器的文档中 ,它表示–export-all-symbols是默认行为,当你不提供def文件时,如果你不提供def文件,它将被禁用。 无论如何,第三方库中的符号都被导出。 编辑:添加选项–exclude-libs LIBS或–exclude-symbols SYMBOLS不会阻止导出库中的符号。

delphi链接到Windows DLL静态或dynamic

我知道,在加载时隐式链接到库可能会导致性能提高,因此我想知道是否是在编译时以这种方式链接的良好做法,从而增加可执行文件的大小(承认这只是边际)在运行时。 我的问题是,当与位于System32中的Microsoft Windows dll文件链接时,在加载时是否“更好”链接,因为您可以确定这些库将存在或遵循显式方法? 使用的语言是delphi(帕斯卡)和有问题的库是WTsAPI32.dll – terminal服务。 编辑:正如所指出的 – 我select的语言是不正确的,并已被修改。 另外,由于Unix中只有每个库都有广泛的链接,所以我可以省略关于可执行文件大小的评论,我相信当时我实际上是指静态链接,把库代码捆绑到可执行文件中,现在我意识到这一点使用dll文件(DUH!)是不可能的。 谢谢大家。

从DLL导出一个C ++类

我的大部分C / C ++开发都涉及单片模块文件,绝对没有任何类,因此通常当我需要使用可访问的函数构build一个DLL时 ,我只需使用标准的__declspec(dllexport)指令导出它们即可。 然后通过LoadLibrary()或者在编译时使用头文件和lib文件来dynamic访问它们。 当你想要导出整个类(以及所有的公共方法和属性)时,你如何做到这一点? 是否有可能在运行时dynamic加载该类,如果是这样,如何? 你怎么用一个头文件和lib来编译链接?

什么是dll劫持?

简单的问题:什么是dll劫持? 我读了很多关于哪些应用程序易受攻击的问题,但是为什么还没有深入。 解决赞赏。

如何编译一个用于Windows的PHP 5.3扩展作为DLL?

我目前正在重写最初为PHP 4.2.2.编写的PHP扩展PHP 4.2.2. 我的问题是build立/编译过程生成一个.dll而不是编译到PHP核心的扩展。 环境是Windows Server 2003.我正在使用Visual Studio 2008。 我使用EXT_SKEL脚本来生成框架,我可以成功地将扩展编译到php核心。 我试图将其编译为.dll以便我可以轻松地将其分发给我的客户。 任何人都可以指出我正确的方向如何告诉PHP 5.3构build过程,我想我的扩展名为.dll而不是静态地编译到PHP本身? 为了构build扩展的框架,我运行: php.exe ext_skel_win32.php –extname=myextension –proto=myprototypefile.dat 修改config.w32来取消注释“ARG_ENABLE”行,并启用默认值 buildconf.bat cscript /nologo configure.js NMAKE 我确认我可以在PHP中运行扩展的方法,但是它不会生成可分发的.dll。 而是将其编译到PHP二进制文件中。 任何人都可以指向正确的方向吗?

PHP Pthreads最新版本3.1.6(64位)不安装在Apache上

我正在尝试安装PHP的最新pthreads扩展3.1.6 64位。 根据pthreads的作者build议,在http://github.com/krakjoe/pthreads 我已经把这两个dll放到了所需的位置。 将pthreadVC2.dll(包含在Windows发行版中)添加到与php.exe相同的目录中。 C:\ Apache24 \ php添加php_pthreads.dll到PHP扩展文件夹例如。 C:\ Apache的\ PHP \分机 并且在Windows \ system32目录下 并且在[Apache Http.confd] [1]中添加了LoadFile, 我已经添加了扩展到我的php.ini php.ini中 但Apache不会启动,当我检查Apache的error.log,我有下面 [Tue Jun 28 11:38:31.184618 2016] [ssl:warn] [pid 8640:tid 352] AH01909:localhost:443:0服务器证书不包含与服务器名称匹配的ID [Tue Jun 28 11:38:31.215819 2016] [core:warn] [pid 8640:tid 352] AH00098:pid文件C:/Apache24/logs/httpd.pid覆盖 – 以前的Apache运行不正常关机? 我已经将php_pthreads.dll扩展名移到了扩展名列表的顶部,并且没有任何喜悦。 它只是不会从这个pthreads dll开始。 但是,如果我评论回来;扩展= p​​hp_pthreads.dll,我的Apache将重新启动,但不是与此pthreads DLL。 这是一个错误还是我做错了什么? 我的系统设置窗口7 64位,与Apache 2.4.x VC14的小信息 […]

在.NET中占用固定的地址

FIPS能力OpenSSL有一个限制 – 它必须加载libeay32.dll在固定的地址,如果加载在任何其他地址,它没有初始化检查,所以它不能用于FIPS模式。 所以我们根据微软的build议select地址,并且在一些不时被其他地址库占用的机器上 – 比如MSVCR120_CLR0400.dll或者mscorlib.ni.dll或者clr.dll ,你就明白了。 有没有什么办法来检查是否采取了一些固定的地址+长度,并要求操作系统释放我的这部分内存,如重新启动这些DLL到其他内存部分或类似的东西? 更新: 我从ListDLLs的20个设备收集信息,有什么样的模式加载在哪里,但它远远没有明确的定义。 所以我跑了一些math,find了最大的差距,在那20个日志中没有加载任何东西,把libeay32的基地址改成那个差距的某个地方(差距比dll大6倍,所以我select了〜它的中间),仍然在几次尝试应用程序之前设法加载一些东西在libeay32之前的空白(具体 – clrjit.dll,它有0x10000000,我认为是默认的基地址),虽然在应用程序中,我尝试加载libeay32尽快地。