在32位DLL中找不到入口点.使用64位DLL
本文关键字:DLL 使用 入口 64位 找不到 32位 | 更新日期: 2023-09-27 18:09:05
我们的团队开发了一个c++ CUDA DLL和一个使用我们的DLL的c# . net 4.5 HMI。
这些程序最初计划只在64位平台上可用。
最近我们的客户要求我们把我们的开发也适用于32位平台。
我们设法将DLL和HMI编译为32位。
我们现在有两种配置:
- 使用CUDA DLL x64的HMI x64
- 使用CUDA DLL x86的HMI x86
64位配置工作正常
32位配置有一些问题:
- 只有部分导出函数可用
- 不可用的函数调用抛出异常:入口点未找到
in
用Dependency Walker探索我们的32位和64位dll显示了我们所有导出的函数。(只有混乱的名字在32个& &;64位)
下面是一些可用的导出函数的原型:
extern "C" RetourInit __declspec(dllexport) __stdcall initGPU();
extern "C" Retour __declspec(dllexport) __stdcall setImageGpu(int idGPU, int nbImages, Image * listeImages);
extern "C" Retour __declspec(dllexport) __stdcall getImageGpu(int idGPU, int nbImages, Image * listeImages);
extern "C" Retour __declspec(dllexport) __stdcall duplicateImage(int idGPU, int nbImages, Image * listeImages);
下面是一些不可导出函数的原型:
extern "C" Retour __declspec(dllexport) __stdcall decoupe(int idCarte, Decoupe paramDecoupe);
extern "C" Retour __declspec(dllexport) __stdcall fusion(int idCarte, Fusion paramFusion);
如果您有任何建议或问题的解决方案,我们将很高兴听到。
谢谢。
问题是由于通过Fusion &非指针解耦结构
我们把原型改成这样:
extern "C" Retour __declspec(dllexport) __stdcall decoupe(int idCarte, Decoupe* paramDecoupe);
extern "C" Retour __declspec(dllexport) __stdcall fusion(int idCarte, Fusion* paramFusion);
并调整我们的DLL代码。我们的c# HMI没有改变。
这个修改在x86 &x64 .
很奇怪,64位平台不受这个修改的影响…
感谢您的评论