首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >windows不是有效的Win32应用程序。

windows不是有效的Win32应用程序。
EN

Stack Overflow用户
提问于 2022-05-12 06:07:37
回答 2查看 622关注 0票数 0

概述

相同的动态链接库(tableOcr.dll)在不同的系统win10s(win10系列和win10职业系列)中表现出不同的结果。

构建工具

代码语言:javascript
运行
复制
  1. java 
  2. corretto-1.8.0_302 
     openjdk version "1.8.0_302"
     OpenJDK Runtime Environment Corretto-8.302.08.1 (build 1.8.0_302-b08)
     OpenJDK 64-Bit Server VM Corretto-8.302.08.1 (build 25.302-b08, mixed mode)
  3. c++11
  4. visual studio 2017 (14.9)

背景

我需要java(x64)通过jni调用我的c++ func,我的共享库是tableOcr.dll(x64)和tableOcrJni.dll(x64),它们链接到tableOcr.dll;我执行了以下步骤:

  1. 用VisualStudio2017 (14.9)构建我的tableOcr.dll(x64),用win10专业版(x64 version=10.0.18363.1440)构建windows SDk版本10.0.17763.0。TableOcrJNI.dll密度泛函是tableOcr.dll、lickey_parse.dll和opencv_world430.dll(由x64 depend.exe检查),tableOcrJNI.dll函数之一是:
代码语言:javascript
运行
复制
#ifndef OCREXPORT
# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
#   if defined(STATIC_LINKED)
#     define OCR_EXPORT
#   else
#     define OCR_EXPORT __declspec(dllexport) ///! 为了动态加载动态库
//#     define OCR_EXPORT  ///! 为了动态加载动态库
#   endif
# else
#   if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY)
#     define OCR_EXPORT __attribute__ ((visibility("default")))
#   else
#     define OCR_EXPORT
#   endif
# endif
#endif

OCR_EXPORT int _cdecl obtain_table_info_init(const char* _IN_ models

  1. 使用test.exe(构建在x64 professional win10之上)测试win32 loadLibrary方式来加载tableOcrJni.dll。此dll加载了绝对路径。 It成功
  2. 使用java测试程序加载我的tableOcrJni.dll,会导致windows 10系列(x64 version=10.19043.1706)中的win32无效。

加法

  1. 我确信% path %对于我的java来说是可以的,我在其中添加了我的dll(所有链接的dll)路径E:/mydll/
  2. 我尝试了一些在google中找到的解决方案(包括这个部分),但没有帮助。
  3. 我尝试了win10专业(x64 version=10.0.18363.1440)系列()中的第3步,没有问题。
  4. 我尝试在win10家庭系列上安装vs 2017,但是步骤都失败了。
  5. 我尝试在x64 win10系列上构建x64 corretto-1.8.0_302 jdk,但是step3失败了。
EN

回答 2

Stack Overflow用户

发布于 2022-05-12 21:00:05

它是体系结构(bitness)在Java (可执行文件)和您的.dll (pc064 <=> pc032或反之亦然)之间不匹配的。有关该主题的更多细节,请查看[SO]:抛出OSError:[WinError 193] %1不是有效的Win32应用程序(@CristiFati的答案)

要检查Java体系结构,请使用:

代码语言:javascript
运行
复制
[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q072210792]> java -version
java version "1.8.0_331"
Java(TM) SE Runtime Environment (build 1.8.0_331-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.331-b09, mixed mode)

在我的例子中,它是pc064 (064位)。

你有两个选择:

因为我不知道哪一个是谁,我的建议是走向pc064。

为了检查PE_s的比特性、依赖性和更多细节,可以使用[GitHub]:幸运/依赖或(旧的) 依赖沃克或(_VStudio's) DumpBin ([MS.Docs]:DUMPBIN参考)。

票数 0
EN

Stack Overflow用户

发布于 2022-06-07 01:29:10

这是链接不匹配。我的tableOcrJni.dll的行为与tableOcr.dll相同。所以我只需要对tableOcr.dll做任何尝试。TableOcr.dll像我说的那样链接一些dll,所以我把tableOcr.dll放到E:/mydll,把tableOcr.dll的动态链接dll放到E:/mydllDepend,然后激活ENV。它工作在Win10 x64家庭系列!但没有证据证明我必须这样做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72210792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档