创建C ++ .dll以供Excel& C#(32 / 64bit窗口)

时间:2013-03-09 10:48:36

标签: c# c++ winapi vba dll

最近,我想开始用Visual C ++ Express 2010构建一个.dll数学库。

我想将.dll用作BOTH Excel VBA&的库引用。 C#个申请。我希望它可以在32bit/64bit窗口中工作。构建后,.dll也应该能够被其他PC使用。

  1. 我是否正确使用Win32 Project? (似乎我不能在Express版本中使用ATL / MFC

  2. 我是否需要在.dll中指定2个不同的VBA接口和接口。 C#加载功能? (VBA要求使用__stdcall)

  3. 在其他PC上使用.dll的任何部署设置? (需要任何regsvr32 cmd进程吗?)

  4. 任何使用C ++ DLL导出类的初学者示例? (例如,VBA / C#可以从这个dll实例化一个新类...)

  5. 因为我不确定我是否可以实例化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();
    };
    

2 个答案:

答案 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. 我个人开始使用“空项目”模板 - 我不喜欢Win32模板提供的所有不必要的标题和(看似)复杂的初始项目设置。然后我会自己手动添加我自己的.c / .h / .cpp文件并代码离开。
  2. 如果您只是导出函数而不是COM类型,那么您不必担心接口。只要您的函数正确导出(参见此处:http://msdn.microsoft.com/en-us/library/ys435b3s%28v=vs.80%29.aspx),它们就可以从.NET(包括C#和VB.NET)和VB6 / VBA以及C / C ++中调用。
  3. “其他电脑”?

答案 1 :(得分:0)

关于#2,您不需要两组接口,因为C#也可以使用__stdcall调用约定。