这是我的情景:
我在C ++中创建了一个常规DLL(使用VS2008),它为导出的函数提供了C接口。其中两个相关函数是 1。 initialize()和2. uninitialize()
在 initialize()里面我必须从客户端应用程序中获取一些参数。到目前为止,我可以想到以下两种方法:
第一种方式:
我创建一个结构,填充它并将结构对象的对象/指针从客户端应用程序传递给DLL。
struct SData
{
DataType param1;
DataType param2;
DataType param3;
DataType param4;
};
第二种方式:
我从我的DLL中导出4个函数,如
SetParam1(DataType param1)
SetParam2(DataType param2)
SetParam3(DataType param3)
SetParam4(DataType param4)
我应该使用哪种方式或其他方式,请建议。
答案 0 :(得分:2)
由于DLL与您的应用程序共享地址空间,因此只需向结构发送指针即可处理所有这些内容。如果您碰巧在应用程序中使用了不同版本的DLL,那么您可能还会在函数中使用某种版本检查,以避免被不同版本的版本混淆。
我个人不建议使用SetParam(param1)
方法,因为它意味着DLL中的全局范围,因此不是线程安全的。另一方面,将所有参数传递给函数本身具有局部范围,不易出错,更容易理解。
例如,您不知道使用SetParam
方法在实际函数之前需要调用多少函数。但是,在函数中传递参数允许您仅通过查看函数声明或结构成员来评估是否提供了足够的参数。如果您需要调用各个方法来设置参数,则必须有文档。
类似地,您可以将每个结构成员作为单独的参数放在函数中,但是在一定数量之后,在单个函数调用中更难以维护太多参数。在这种情况下使用指向结构的指针更好。
将自己视为从公司购买DLL的人。您更喜欢DLL是什么?编写代码会哪种方式更简单,更直接?