我们的团队开发了一个C ++ CUDA DLL和一个使用我们的DLL的C#.NET 4.5 HMI。
这些程序最初计划仅适用于64位平台。
最近,我们的客户要求我们为32位平台提供开发服务。
我们设法以32位编译DLL和HMI。
所以我们现在有2个配置:
64位配置完美无缺。
32位配置存在一些问题:
使用 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);
如果您有任何提议或问题的解决方案,我们将很高兴听到它。
谢谢大家。
答案 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位平台没有受到这种修改的影响,这很奇怪......
感谢您的评论。