创建C ++的.dll为用Excel&C#(32位/ 64位窗口)的使用(Creating C++

2019-08-17 10:06发布

最近,我想开始建设有2010的Visual C ++速成一个.dll数学库。

我想用该.dll为BOTH图书馆参考Excel VBAC#应用程序。 我希望它会在两个工作32bit/64bit窗口。 该.dll也应该能够通过其他PC构建后使用。

  1. 我是正确使用Win32项目开始? (看来我不能使用ATL / MFC的快速版本)

  2. 我是否需要对VBA&C#加载功能将.dll指定2套不同的接口? (VBA要求使用__stdcall)

  3. 使用在其他PC .dll文件的任何部署设置? (需要任何REGSVR32 CMD进程呢?)

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

因为我不知道我是否可以在C ++的.dll下面.header文件实例ClassA的&ClassB的VBA中/ C#:

#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();
};

Answer 1:

不能使用C ++来构建出口COM类型或C风格的函数的DLL文件,并把它在这两个32位和64位环境中工作。 DLL文件是一种PE / COFF形象,PE仅支持每个文件一个ISA(与Macintosh的可执行文件格式,它允许对同一图像文件在多个国际检索单位)。 你必须重新编译两次,一次用于x86,另一个为64位。 唯一的例外是.NET“AnyCPU”的DLL,但这是另一个故事。

根据这个对照表 ,C ++快讯2010年不包括64位编译器,也不包括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. “其他PC”?


Answer 2:

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



文章来源: Creating C++ .dll for use by Excel & C# (32/64bit Window)
标签: c# c++ winapi vba dll