使用32位DLL找不到入口点。使用64位DLL

时间:2014-06-18 15:27:38

标签: c# c++ dll cuda 32bit-64bit

我们的团队开发了一个C ++ CUDA DLL和一个使用我们的DLL的C#.NET 4.5 HMI。

这些程序最初计划仅适用于64位平台。

最近,我们的客户要求我们为32位平台提供开发服务。

我们设法以32位编译DLL和HMI。

所以我们现在有2个配置:

  • 使用CUDA DLL x64
  • 的HMI x64
  • 使用CUDA DLL x86的HMI x86

64位配置完美无缺。

32位配置存在一些问题:

  • 只有一些导出的功能可用
  • 不可用函数调用抛出异常:未找到入口点<名称>在< Dllname>

使用 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);

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

谢谢大家。

1 个答案:

答案 0 :(得分:1)

问题是由于通过Fusion& Decoupe结构不是指针。

我们只是将原型改为:

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& 64

64位平台没有受到这种修改的影响,这很奇怪......

感谢您的评论。