Tag: dll

使用回调从外部解压缩dll显示文件名(Inno Setup)

最初在这里被问到,但被要求将其作为一个单独的问题提交。 我在下面的C中编写了以下dll,我在Inno Setup Installer中使用它来提取游戏文件。 这是一个最初使用16位安装程序的游戏的替换安装程序,文件从CD-ROM中复制。 我希望能够使用InnoTools InnoCallback来显示使用我的dll提取的文件名,但由于这是我第一次尝试使用C编码,我不知道该怎么做。 可以在此处找到此function的示例: http : //freearc.org/InnoSetup.aspx 我希望能够使用外部DLL中的文件名设置WizardForm.FilenameLabel.Caption。 我的Inno安装脚本的相关部分: function VolEx( filename, outputpath: String ): Integer; external ‘VolEx@files:volex.dll stdcall’; (DriveLetter是CD-ROM的路径,即“D:\”,因此输出当前显示为“D:\ world \ archive.vol”。我的目标是“C:\ game-path \ world” \存档\ file.ext“) procedure VolExtract(); begin if not DirExists(WizardDirValue() + ‘\’ + Worlds[w]) then begin CreateDir(WizardDirValue() + ‘\’ + Worlds[w]); end; for n := 0 to […]

c静态链接到lib并仍然请求DLL

使用visual studio 2008,我有一个.H和一个库的.LIB文件。 我编写了一个程序并通过项目属性修改了LIB。 它编译得很好,但是当它运行时,它要求安装DLL。 如果DLL与EXE在同一个目录中它可以工作……但是,如果我有LIB,是不是已经意味着这些函数与我的程序静态链接? 谢谢

你可以在使用JNI从java调用的c ++函数中创建一个新的JVM吗?

所以我的设置是我有一个由我开发的.dll( A.dll ),它在原始应用程序中从外部进程调用,它基本上只是一个.exe文件,我没有源代码( B) .exe )。 A.dll的目的是与.jar文件通信,该文件也是由我开发的( C.jar )。 所以在应用程序中,“通信流程”如下所示 B.exe – > A.dll – > (通过JNI) – > C.jar 现在,我想要做的是在C.jar的开发环境中添加A.dll和C.jar之间的调用作为我的测试套件的一部分。 到目前为止,我已经创建了另一个.dll( D.dll ),它反映了A.dll中的所有函数,但是使用了JNIEXPORT,只是直接调用A.dll中的相应函数。 所以这种情况下的“沟通流程”如下: C.jar开发框架中的unit testing – >(通过JNI) – > D.dll – > A.dll – >(通过JNI) – > C.jar 在这一点上,一个非常简单的函数调用只是在C.jar中打印出来的东西, 它通过整个链条起作用; 从unit testing调用到C.jar 。 但是当我在A.dll中调用函数时会出现问题,该函数使用CreateJavaVM()创建一个新的JVM,这会产生以下错误: 初始化VM时出错无法加载本机库:找不到指定的过程 所以基本上我想知道它是否真的可以这样做,或者只是在同一进程中已经有一个正在运行的JVM时调用CreateJavaVM()根本不可能? 我知道你不能在同一个进程中多次调用CreateJavaVM() ,但是在这种情况下它只被调用一次但是过程中已经存在JVM – 你甚至可以在同一个进程中运行多个JVM吗? 解: 感谢@ apangin的回答,下面的代码片段解决了我的问题: […]

在旧的Borland C中使用Visual C ++ DLL?

我必须使用旧的Borland编译器(BC 5)支持用C编写的旧应用程序。 不幸的是,我们使用的旧TCP / IP库开始显示它的年龄,并且遇到了Vista和Win7机器的问题。 我有一个新的MS Visual C ++函数库,我想用它来制作一个可以从Borland C调用的DLL。 所以,我有两个问题:1)如何使一个Visual C ++ DLL可以从Borland C程序调用,2)如果它是可调用的,如何从普通的旧C调用C ++函数? 理想情况下,整个项目应该转换为Visual C,但是有许多遗留function可以使该项目成为一项重大任务! 我正在寻找一个快速补丁来让它保持活力一段时间:) 史蒂夫

为外部dll上的缓冲区分配内存并在主应用程序上使用它是否安全?

正如在主题中..我在一个应用程序中找到了类似的东西。 在主C应用程序中我们有声明: void* buff = NULL; 后来有一个电话: ReadData(&buff); SaveToFile(buff); SaveToFile()是main函数的C函数。 ReadData(void* * )是来自外部dll的C ++函数。 在此函数中,缓冲区的内存由malloc函数分配并归档数据。 所以这是我的问题:这是正确的吗?

如何在不依赖于C运行时的情况下创建Win32 DLL

使用Visual Studio 2008及其C / C ++编译器,如何创建仅依赖于其他Windows DLL的Win32 DLL,并且不依赖于Microsoft C运行时? 我有一些C代码,我想放在一个完全计算的DLL中,几乎不使用C库函数。 对于它确实使用的那些(例如memcpy),我很乐意重新编写代码以使用Win32 API等价物(例如CopyMemory)。

我可以通过检查DLL本身来判断使用哪个版本的Visual Studio来构建DLL

我需要重建几年前建立的DLL。 我有原始的C源代码,但不是Visual Studio项目或解决方案。 我想尝试使用最初使用的相同Visual Studio版本重建它。 我可以说这是一个普通的旧Windows DLL,而不是.NET。 我也知道源代码在C中。通过检查DLL二进制文件,还有什么我可以告诉原始构建环境和工具吗? 谢谢!

使用dyn.load在R x64中加载编译的c代码时出现问题

我最近从一台32位笔记本电脑转到64位台式机(均为win7)。 我刚刚发现我在使用dyn.load加载dll时出现错误。 我想这是一个简单的错误,我忽视了一些事情。 例如,我写这个简单的c函数(foo.c): void foo( int *x) {*x = *x + 1;} 然后在命令提示符下编译它: R CMD SHLIB foo.c 然后在32位RI可以在R中使用它: > dyn.load(“foo.dll”) > .C(“foo”,as.integer(1)) [[1]] [1] 2 但在64位RI获得: > dyn.load(“foo.dll”) Error in inDL(x, as.logical(local), as.logical(now), …) : unable to load shared object ‘C:/Users/Sacha/Documents/R/foo.dll’: LoadLibrary failure: %1 is not a valid Win32 application. nd. 编辑: 作为参考,可以使用–arch 64x在架构中强制使用R […]

我可以静态链接MSVCRT和mingw吗?

我有C程序我在Windows上用mingw编译。 它工作正常,但需要MSVCRT.DLL 。 我想静态链接(就像我在Visual Studio中可以做的那样)。 这可能吗? 我尝试了-static标志到gcc ,它没有做任何改变。 使用标准C ++库的C ++程序怎么样?

返回共享库符号表

例如: void* sdl_library = dlopen(“libSDL.so”, RTLD_LAZY); void* initializer = dlsym(sdl_library,”SDL_Init”); 假设没有错误,初始化程序将指向共享库libSDK.so中的函数SD_Init。 但是,这需要知道符号“SDL_Init”存在。 是否可能在库中查询其所有符号? 例如,在这种情况下,它将返回SDL_Init,函数指针以及libSDL.so导出的任何其他符号。