标签: loadlibrary

ERROR_INVALID_ORDINAL 究竟是什么意思?

LoadLibrary 函数返回错误代码 182。来自 MSDN:

ERROR_INVALID_ORDINAL: "操作系统无法运行 %1"

有没有人对这个错误有更好的描述?

dll winapi loadlibrary

5
推荐指数
1
解决办法
3884
查看次数

Android 加载原生库

我正在尝试加载我使用独立 NDK 工具链构建的库。

我构建了 libGLmove.so 并将其放置在我的 Eclipse 项目的 libs/armeabi 中

然而,调用System.loadLibrary("GLmove")抛出一个UnsatisfiedLinkError

关于如何解决问题或让 Android 找到我的库的任何想法?ndk-build 构建后如何打包库?

编辑:确切的编译标志是:

/Users/thomas/Documents/android-ndk-r5b/toolchains/arm-eabi-4.4.0/prebuilt/darwin-x86/bin/arm-eabi-g++ --sysroot=/Users/thomas/Documents/android-ndk -r5b/platforms/android-8/arch-arm -march=armv7-a -mfloat-abi=softfp -mfpu=neon -Wl,--fix-cortex-a8 -fno-exceptions -fno-rtti -nostdlib -fpic -shared -o GLmove.so -O3

android loadlibrary android-ndk

5
推荐指数
1
解决办法
3万
查看次数

将MATLAB中的指针参数传递给C-DLL函数foo(char**)

我正在编写一个从MATLAB调用的C-DLL.是否可以使用const char **参数调用函数?例如

void myGetVersion( const char ** );
Run Code Online (Sandbox Code Playgroud)

C代码是:

const char *version=0;
myGetVersion( &version );
Run Code Online (Sandbox Code Playgroud)

什么是相应的MATLAB-Code(如果可能的话)?

非常感谢你!

PS:我认为这是帮助页面,但我找不到我的情况:-(

c matlab pointers shared-libraries loadlibrary

5
推荐指数
1
解决办法
5007
查看次数

如果函数存在,如何检查DLL?

我正在研究动态加载特殊配方DLL的东西.在考虑使用此DLL之前,我需要能够检查DLL并确保所有预期的功能都存在.如果它缺少某些功能,我不应该尝试加载它.我知道我可以尝试调用其中一个函数并查看是否存在异常,但我会在调试模式下看到错误.

如果函数存在,我该如何检查DLL?我想在加载它之前检查它(使用LoadLibrary),但我想如果我必须加载它来执行此检查也没问题.

UPDATE

我在下面接受了David的回答,并且认为我会发布我的最终代码以显示整个过程.我把它变成了一个函数返回一个Bool,无论它是否成功,清理了一下代码,并在底部添加了另一个函数,使用这个函数逐个检查每个名字.

我决定使用这种方法而不是阅读,GetProcAddress因为它将来会帮助我解决其他问题.

type
  PIMAGE_NT_HEADERS = ^IMAGE_NT_HEADERS;
  PIMAGE_EXPORT_DIRECTORY = ^IMAGE_EXPORT_DIRECTORY;

function ImageNtHeader(Base: Pointer): PIMAGE_NT_HEADERS; stdcall; 
  external 'dbghelp.dll';
function ImageRvaToVa(NtHeaders: Pointer; Base: Pointer; Rva: ULONG; 
  LastRvaSection: Pointer): Pointer; stdcall; external 'dbghelp.dll';

function ExportedFunctionNames(const ImageName: string; NamesList: TStrings): Bool;
var
  i: Integer;
  FileHandle: THandle;
  ImageHandle: THandle;
  ImagePointer: Pointer;
  Header: PIMAGE_NT_HEADERS;
  ExportTable: PIMAGE_EXPORT_DIRECTORY;
  NamesPointer: Pointer;
  Names: PAnsiChar;
  NamesDataLeft: Integer;
begin
  Result:= False;
  NamesList.Clear;
  FileHandle:= CreateFile(PChar(ImageName), GENERIC_READ, FILE_SHARE_READ,
    nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  if FileHandle …
Run Code Online (Sandbox Code Playgroud)

delphi dll loadlibrary delphi-xe2

5
推荐指数
2
解决办法
3847
查看次数

0xC0000005:访问冲突执行位置0x00000000

我正在编写一个 MFC 项目,该项目尝试调用 DLL 中的函数,该函数将以字符串形式返回一些信息。DLL中的函数如下:

int GetInfo(char* Info)
Run Code Online (Sandbox Code Playgroud)

如果成功,该函数将返回 0。信息将在字符串参数中返回。调用例程如下:

typedef int (WINAPI *FUNC1)(char* szInfo);


HINSTANCE hinstLib;
FUNC1 GetInfo;
char szInfo[50];

hinstLib = LoadLibrary(TEXT("DevInfo.dll"));

// If the handle is valid, try to get the function address.
if (hinstLib != NULL) 
{ 
    GetInfo = (FUNC1) GetProcAddress(hinstLib, "GetInfo"); 

    // If the function address is valid, call the function.
    if (NULL != GetInfo) 
    {
        if((GetInfo) (szInfo)) // Error here!!
        {
            AfxMessageBox(_T("Error Reading"));
        }
    }

    FreeLibrary(hinstLib);
} 
Run Code Online (Sandbox Code Playgroud)

此代码在编译和链接时没有错误。执行时,会在上述位置返回“访问冲突执行位置0x00000000”的错误。任何人都可以建议吗?

c++ mfc loadlibrary getprocaddress access-violation

5
推荐指数
1
解决办法
4万
查看次数

GetProcAddress() 失败,错误 127

这是我的 DLL 代码:

#include <Windows.h>
#include <iostream>

int sysLol(char *arg);

int sysLol(char *arg)
{
   std::cout<<arg<<"\n";
   return 1;
}
Run Code Online (Sandbox Code Playgroud)

这是我的应用程序代码:

#include <Windows.h>
#include <iostream>
#include <TlHelp32.h>
#include <stdlib.h>

typedef int (WINAPI* Lol)(char* argv);
struct PARAMETERS
{
    DWORD Lol;
};

int main()
{
    PARAMETERS testData;
    HMODULE e = LoadLibrary(L"LIB.dll"); //This executes without problem
    if (!e) std::cout<<"LOADLIBRARY: "<<GetLastError()<<"\n";
    else std::cout<<"LOADLIBRARY: "<<e<<"\n";
    testData.Lol = (DWORD)GetProcAddress(e,"sysLol"); //Error 127?
    if (!testData.Lol) std::cout<<testData.Lol<<" "<<GetLastError()<<"\n";
    else std::cout<<"MESSAGEBOX: "<<testData.Lol<<"\n";
    std::cin.ignore();
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

所以,我的 LIB.dll 使用 成功加载LoadLibrary(),但 …

c++ dll loadlibrary getprocaddress

5
推荐指数
1
解决办法
2万
查看次数

加载 Android .so 有时会失败(很少)

我们的 Android 应用程序遇到了一个奇怪的问题。在 Fabric 中,我们很少发生崩溃。这是一个标准的 UnsatisfiedLinkError ,意味着在 Java 类的静态初始化程序中,.so 库无法加载。这是我们迄今为止所发现的:

  • 这个问题非常罕见。它发生在数十万台设备中的几百台设备中。

  • 一旦出现这种情况,似乎重启甚至重新安装都不能解决问题。

  • 这种情况发生在索尼、三星、华为等各个品牌上。

  • 从 2.3 到 5.x 的所有 Android 版本都会出现这种情况。

  • 我们在办公室的 Nexus 1 设备上成功捕获了它。当它开始发生时,它总是在 LoadLibrary 调用中失败,即使同一个 apk 在其他设备上运行得很好。

  • 问题发生的时候,我把armv7a和x86版本的lib都去掉了,只留下了armeabi的,以排除加载错误的lib,还是失败。通过Android studio重新运行应用程序多次添加日志仍然导致在同一个地方失败。

  • 然后突然间,在没有明显变化的情况下,它开始在 Nexus 1 中工作,甚至在重试数十次之后,我们无法再次重现该问题。在它开始工作之前发生的唯一一件事是,我尝试使用 adb install 手动安装损坏的 apk,但失败了,下次我通过 Android studio 加载该应用程序时,它工作了,并且从那以后一直工作。我不确定损坏的 apk 安装失败是否以某种方式清除了某些内容,或者这只是一个巧合。

  • 我未能做的事情是检查发生故障时设备上的 lib 文件夹中是否确实存在armeabi .so 文件。我是在它已经开始工作之后才开始考虑这个问题的。

所以,总结一下。该 apk 完全没问题,但可以在 99.9% 的设备上从 Android studio 和 Play 商店安装,但在某些情况下(非常罕见),LoadLibrary 会失败,当失败时,似乎没有明显的修复方法,甚至重新安装都没有解决这个问题,但正如我所解释的,某些东西终于发生了变化,当它开始在 Nexus 1 上工作时,它从那时起就一直继续工作。

这个问题确实很棘手,因为我们现在无法重现它,而且我们知道它至少影响了一小部分用户。

欢迎任何有关如何缩小范围的建议。

android loadlibrary android-ndk

5
推荐指数
0
解决办法
552
查看次数

LoadLibrary 失败,错误代码 193

我不明白为什么我无法使用 LoadLibrary 加载我的 dll“接口”。加载依赖项时似乎失败了,但我不确定为什么。

这是代码:

AfxMessageBox(L"before load library");
HMODULE interfacDll = LoadLibrary(TEXT("C:\\QA\\Pcdlrn\\Win32\\Release\\INTERFAC.DLL"));
if (!interfacDll)
  DWORD dw = GetLastError(); // returns 0xc1 (193)
AfxMessageBox(L"after load library");
Run Code Online (Sandbox Code Playgroud)

这是 gflags (x86) 加载器快照的输出:

18a0:2a40 @ 06858973 - LdrGetDllHandleEx - ENTER: DLL name: ntdll.dll DLL path: NULL
18a0:2a40 @ 06858973 - LdrGetDllHandleEx - INFO: Locating DLL ntdll.dll in path C:\QA\Pcdlrn\CNCSERVER\Win32\Release;C:\Windows\system32;C:\Windows\system;C:\Windows;C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\NativeBinaries\x86;C:\windows\system32;C:\windows;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows
18a0:2a40 @ 06858989 - LdrpFindLoadedDll - ENTER: DLL name: ntdll.dll DLL …
Run Code Online (Sandbox Code Playgroud)

c++ windows dll winapi loadlibrary

5
推荐指数
1
解决办法
3万
查看次数

如何在C++中从内存中卸载DLL?

如何从内存中卸载DLL.我使用FreeLibrary但它仍然加载

HINSTANCE hGetProcIDDLL = LoadLibrary("path.dll");
f_funci func = (f_funci)GetProcAddress(hGetProcIDDLL, "method");
int x = func();
FreeLibrary(hGetProcIDDLL);
Run Code Online (Sandbox Code Playgroud)

我曾经UnmapViewOfFile和FreeLibraryAndExitThread内存,但它仍然太

c++ memory dll loadlibrary

5
推荐指数
1
解决办法
8790
查看次数

缺少依赖项时如何使 LoadLibrary 显示错误对话框

假设我们有两个动态库libfoo.dll和libbar.dll,鉴于这libbar.dll取决于libfoo.dll。此外,我们编译一个可执行文件test.exe,加载我们libbar.dll使用的 WinAPI 函数LoadLibrary()。

如果我们text.exe在 Windows XP 上运行missing libfoo.dll,则LoadLibrary()显示对话框警告而不是libfoo.dll实际丢失并设置LastError为ERROR_MOD_NOT_FOUND(126)。

如果我们text.exe在相同条件下在 Windows 10 上运行相同,LoadLibrary()设置LastError为ERROR_MOD_NOT_FOUNDonly,则不会出现对话框。

在这两种情况下ErrorMode都是 0。那么是否有可能在LoadLibrary()调用过程中捕获缺少依赖项的名称,或者至少,如何 LoadLibrary()在 Windows 10 上显示错误对话框?

这是一个示例代码(使用 MinGW):

foo.c

int foo(int a, int b)
{
    return a + b;
}
Run Code Online (Sandbox Code Playgroud)

编译: gcc foo.c -o libfoo.dll -fPIC -shared

酒吧

int foo(int …
Run Code Online (Sandbox Code Playgroud)

c dll winapi loadlibrary windows-10

5
推荐指数
1
解决办法
1320
查看次数