我想将几个数据传递给Dll函数,所以我想创建一个结构并通过一个结构将它们传递给Dll dunction:
struct options
{
int op1,
int op2,
int op3,
char * op4,
...
char * op10
}
void dllFunction(options myOptions)
由于dll应该以适用于Windows平台的方式实现,而不管它是什么开发工具,我想知道:
以这种方式发送数据是否有效?请注意,结构成员都是基本的c类型(int,float,double,...)。
为什么我担心呢?如你所知,不同的编译器以不同的方式实现了std类,所以你不能通过dll边界传递std类,但是我不确定所有编译器是否以相同的方式放置struct成员或者它们不是,就好像它们不是,那么代码可能不适用于某些编译器。
是一个结构是一个简单的c型数据类型吗?
如果我不能为此目的使用结构,那么最好的方法是什么(将大量数据传递给dll函数中的函数?
答案 0 :(得分:2)
C ABI定义明确且稳定,因此效果很好。如果要编译为C ++,要确保获得C ABI,则需要使用extern "C"
进行批注。
你唯一遇到麻烦的就是内存指针。由于无法保证应用程序和DLL使用兼容的运行时库,因此分配内存的代码必须始终是释放它的代码。例如,您不能拥有应用程序malloc
缓冲区,将指向该缓冲区的指针传递给DLL,然后期望DLL到free
缓冲区。应用程序需要free
缓冲区(因为它是调用malloc
的缓冲区),或者应用程序需要导出DLL将调用以释放内存的MyFree
函数。