Tag: dll

为什么winpcap需要运行.lib和.dll?

规格可以在这里看到: http://www.winpcap.org/docs/docs_40_2/html/group__wpcapsamps.html 这很奇怪, .lib或.dll足够IMO,为什么它需要两者?

允许在VB.net代码中调用C dll

我遇到了一个问题,我正在使用C Dll进入我的VB.net代码。 我有.H文件,它显示了用C语言实现的这个DLL。 此.H文件包含许多结构和联合,其中包含某些结构类型的变量。 有一个主结构,其中包含指向这些结构和联合的指针,最后将主结构的地址传递给dll函数。 我能够弄清楚如何在vb.net中使用编组创建结构和联合,以及如何传递包含其他结构和联合的地址的结构的地址。 请我解决这个问题。 任何帮助,将不胜感激。 谢谢,YOgi

在x64 DLL中强制名称修改

我正在将32位应用程序移植到64位。 该应用程序支持DLL的插件。 不幸的是,每个插件需要具有的强制函数之一称为FreeLibrary ,它当然与同名的kernel32 API冲突。 我的插件API使用FreeLibrary名称的原因是该应用程序源自FreeLibrary不与任何OS API冲突的不同平台。 但是,即使在使用FreeLibrary 32位Windows上也不是问题,因为32位DLL使用名称修改,即该函数存储为_FreeLibrary ,因此不会与kernel32 API冲突。 但是,在64位上,我现在遇到了一个问题,因为64位似乎没有使用名称修改。 在64位编译器创建一个名为FreeLibrary的符号,这当然与同名的kernel32 API冲突并拒绝链接,导致以下错误: Microsoft (R) Incremental Linker Version 9.00.30729.01 Copyright (C) Microsoft Corporation. All rights reserved. kernel32.lib(KERNEL32.dll) : error LNK2005: FreeLibrary already defined in test.o Creating library test.lib and object test.exp test.dll : fatal error LNK1169: one or more multiply defined symbols found 因此,我想知道是否有任何方法强制x64 […]

是否可以在DLL中导出C链接的C ++成员方法?

在cpp文件中考虑这个: struct someStruct{ public: extern “C” __declspec(dllexport) int sumup(); } someStruct; extern “C” __declspec(dllexport) int someStruct::sumup() { return 0; } 这不编译: error: expected unqualified-id before string constant是否无法使用C链接导出C ++成员方法?

JNA数据返回到预期的第16个字节

我期待在内存中的数据是 [8 Bytes (long)][20 Bytes (byte[20])][8 Bytes (long)][20 Bytes (byte[20])][8 Bytes(long)][20 Bytes (byte[20])] 数据结构似乎是正确的。 问题是结构中的数据是错误的。 预期数据的第一个字节实际上是第9个字节。 前8个预期字节根本不显示(原生长) 我怀疑问题在于我设置Java对象的方式,但我个人并没有看到这个问题。 C联盟: union _My_SN { struct { unsigned long sequence; unsigned char variant; unsigned char version; unsigned short pid; } field; struct { unsigned long long ser; unsigned char serName [20]; //16 Characters followed by 4 \0 unsigned […]

编写用于rundll32.exe的DLL

我有以下代码: mydll.h: #include __declspec(dllexport) void CALLBACK Entry(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow); mydll.c: #include “mydll.h” void CALLBACK Entry(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow) { FILE *f; f = fopen(“C:\\Users\\user\\Desktop\\test.txt”, “rw”); fprintf(f, “test”); fclose(f); } 它编译为mydll.dll。 然后,当我尝试做的时候 rundll32.exe mydll.dll,Entry 它给了我错误信息 Error in mydll.dll Missing entry: Entry 我在这里想念的是什么?

为什么总是说“未定义参考”?

(我在Windows上。) 我正在使用C程序测试我编译的DLL( libsox ),它看起来像这样: #include #include “sox.h” int main(void) { char const * versionText = sox_version(); printf(versionText); return 0; } DLL中定义的函数在sox.h有以下原型(其中包含cdecl ): LSX_RETURN_VALID_Z LSX_RETURN_PURE char const * LSX_API sox_version(void); 这是问题所在:当我尝试使用gcc -lsox -o test.exe test.c构建文件时,出现以下错误: C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\ccSS2h2z.o:test.c:(.text+0xf): undefined reference to `sox_version’ collect2: ld returned 1 exit status 一句话给-lsox :我在MinGW的lib文件夹中有库文件“libsox.dll.a”。 如果我写-lsoxnonsense ,那么它说没有库。 这意味着在所示的情况下,它找到了库。 那么为什么不想创建链接呢?

如何从DLL设置委托/回调(C和C#之间的互操作)

我有一个静态库(* .a for iOS),它包含一些我需要分配给C#回调的函数。 代码在没有回调的情况下工作正常,但是当我将委托添加到结构时,它失败并出现以下错误: ArgumentException: The specified structure must be blittable or have layout information. Parameter name: structure at FMOD_Listener.LoadPlugins () [0x00000] in :0 at FMOD_Listener.Initialize () [0x00000] in :0 (Filename: currently not available on il2cpp Line: -1) 这是本机代码(C): extern “C” { typedef void (F_CALLBACK *basic_callback) (int *value1); typedef struct telephone { int area_code; […]

CTypes错误加载调用另一个DLL的DLL

编辑:我在DLL调用Python C / API时发布了部分解决方案来解决这个问题。 这篇文章显示了所涉及的源代码,但似乎源代码不是问题。 我正在使用CTypes来调用在Windows中调用64位C DLL的NASM 64位DLL,但是当我尝试使用CTypes加载它时,我得到“[WinError 126]无法找到指定的模块。” 这两个DLL正确编译并链接在一起,没有编译器或链接器错误,但CTypes无法加载C dll。 我知道这个错误是因为从NASM dll中调用C dll,因为当我消除C调用时,CTypes会加载NASM dll。 研究表明这是一个路径问题。 C dll与NASM dll位于同一文件夹中,它们从该路径链接在一起。 我还将C dll复制到CTypes程序所在的Python文件夹中,但是没有修复它。 当C dll与NASM dll位于同一文件夹中时,为什么会出现路径问题? NASM代码使用NASM编译并与GoLink链接。 C dll在MSYS2中编译并与GCC链接。 这是NASM代码: ; Header Section [BITS 64] [default rel] export Main_Entry_fn extern DllMain section .data align=16 lib_pass_value: dq 0 lib_return_value: dq 0.0 filename: db “Python_Program.py” modulename: db “Test_For_C_API” section […]

如何阻止延迟加载的DLL抛出“从计算机中丢失”系统错误?

我昨天在插件中设置了延迟加载: #ifdef _WIN32 #pragma warning (disable : 4100) /* Disable Unreferenced parameter warning */ #include #include #endif … // Configuration Properties / Linker / Input / Additional Dependencies: ./lib/libcurl.lib;./lib/libxml2.lib;./lib/iconv.lib;./lib/zlib1.lib;%(AdditionalDependencies) // Configuration Properties / Linker / Input /Delay Loaded Dlls: libcurl;libxml2;iconv;zlib1;%(DelayLoadDLLs) #include “curl.h” #include “HTMLparser.h” #include “xpath.h” #ifdef _WIN32 #pragma comment(lib, “libcurl”) #pragma comment(lib, “iconv”) #pragma […]