📜  DLL-提示

📅  最后修改于: 2020-10-15 10:51:10             🧑  作者: Mango


编写DLL时请牢记以下提示-

  • 使用正确的调用约定(C或stdcall)。

  • 注意传递给函数的参数的正确顺序。

  • 切勿使用直接传递给函数的参数来调整数组大小或连接字符串。请记住,您传递的参数是LabVIEW数据。更改数组或字符串大小可能会因覆盖LabVIEW内存中存储的其他数据而导致崩溃。如果您传递了LabVIEW Array Handle或LabVIEW String Handle并使用Visual C++编译器或Symantec编译器来编译DLL,则可以调整数组大小或连接字符串。

  • 在将字符串传递给函数,选择要传递的正确字符串类型。 C或Pascal或LabVIEW字符串句柄。

  • Pascal字符串的长度限制为255个字符。

  • C字符串以NULL终止。如果您的DLL函数以二进制字符串格式(例如,通过GPIB或串行端口)返回数字数据,则它可能会返回NULL值作为数据字符串的一部分。在这种情况下,传递短(8位)整数数组最可靠。

  • 如果使用数组或数据字符串,则始终传递足够大的缓冲区或数组以容纳函数放置在缓冲区中的所有结果,除非您将它们作为LabVIEW句柄传递,在这种情况下,可以使用CIN调整它们的大小Visual C++或Symantec编译器下的函数。

  • 如果使用_stdcall,请在模块定义文件的EXPORTS部分中列出DLL函数。

  • 在模块定义文件EXPORTS部分中列出其他应用程序调用的DLL函数,或在函数声明中包含_declspec(dllexport)关键字。

  • 如果使用C++编译器,请在头文件中使用extern .C。{}语句导出函数,以防止名称篡改。

  • 如果您正在编写自己的DLL,则在另一应用程序将DLL加载到内存中时,不应重新编译DLL。重新编译DLL之前,请确保使用该特定DLL的所有应用程序都已从内存中卸载。它确保DLL本身不会加载到内存中。如果您忘记了这一点,并且编译器没有警告您,则可能无法正确重建。

  • 用另一个程序测试您的DLL,以确保函数(和DLL)的行为正确。使用编译器的调试器或简单的C程序(可在其中调用DLL中的函数,将有助于您确定DLL或LabVIEW相关的固有困难。