最近,我想开始用Visual C ++ Express 2010构建一个.dll数学库。
我想将.dll用作BOTH Excel VBA
&的库引用。 C#
个申请。我希望它可以在32bit/64bit
窗口中工作。构建后,.dll也应该能够被其他PC使用。
我是否正确使用Win32 Project? (似乎我不能在Express版本中使用ATL / MFC
)
我是否需要在.dll中指定2个不同的VBA接口和接口。 C#加载功能? (VBA要求使用__stdcall)
在其他PC上使用.dll的任何部署设置? (需要任何regsvr32 cmd进程吗?)
任何使用C ++ DLL导出类的初学者示例? (例如,VBA / C#可以从这个dll实例化一个新类...)
因为我不确定我是否可以实例化ClassA& VBA / C#中的ClassB,以及c ++ .dll中的.header文件:
#pragma once
#ifdef DLLDIR_EX
#define DLLDIR __declspec(dllexport) // export DLL information
#else
#define DLLDIR __declspec(dllimport) // import DLL information
#endif
class DLLDIR ClassA
{
public:
void AMethod1();
void AMethod2();
};
class DLLDIR ClassB
{
public:
void BMethodi();
void BMethodii();
};
答案 0 :(得分:1)
您不能使用C ++构建导出COM类型或C样式函数的DLL文件,并使其在32位和64位环境中都能正常工作。 DLL文件是一种PE / COFF映像,PE每个文件只支持一个ISA(与Macintosh可执行格式相比,它允许在同一个映像文件中有多个ISA)。您必须重新编译两次,一次用于x86,另一次用于x64。这个规则的唯一例外是.NET“AnyCPU”DLL,但这是另一个故事。
According to this comparison table,C ++ Express 2010不包含x64编译器,也不包含MFC和ATL库,但您可以单独下载这些库作为Windows SDK的一部分。
回答你的问题:
答案 1 :(得分:0)
关于#2,您不需要两组接口,因为C#也可以使用__stdcall调用约定。