在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);

如果您有任何建议或问题的解决方案,我们将很高兴听到。

谢谢。

在32位DLL中找不到入口点.使用64位DLL

问题是由于通过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位平台不受这个修改的影响…

感谢您的评论