簡體   English   中英

創建供Excel和C#使用的C ++ .dll(32/64位窗口)

[英]Creating C++ .dll for use by Excel & C# (32/64bit Window)

最近,我想開始使用Visual C ++ Express 2010構建.dll數學庫。

我想將.dll用作Excel VBAC#應用程序的庫參考。 我希望它在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實例化一個新類)...

因為我不確定是否可以使用c ++ .dll中的.header文件在VBA / C#中實例化ClassA和ClassB:

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

您不能使用C ++構建可導出COM類型或C樣式函數並使它在32位和64位環境中都能工作的DLL文件。 DLL文件是一種PE / COFF映像,並且PE每個文件僅支持一個ISA(與Macintosh可執行格式比較,該格式允許在同一映像文件中使用多個ISA)。 您必須重新編譯兩次,一個用於x86,另一個用於x64。 唯一的例外是.NET“ AnyCPU” DLL,但這是另一回事了。

根據此比較表 ,C ++ Express 2010不包括x64編譯器,也不包括MFC和ATL庫,盡管您可以將它們作為Windows SDK的一部分單獨下載。

針對您的問題:

  1. 我個人將從“ Empty Project”模板開始-我不喜歡Win32模板提供的所有不必要的標題和(貌似)復雜的初始項目設置。 然后,我自己將自己的.c / .h / .cpp文件添加到代碼中。
  2. 如果僅導出函數而不是COM類型,則無需擔心接口。 只要您的函數正確導出(請參見此處: http : //msdn.microsoft.com/zh-cn/library/ys435b3s%28v=vs.80%29.aspx ),就可以從.NET(包括C#)調用它們和VB.NET),VB6 / VBA和C / C ++。
  3. “其他PC”?

關於#2,您不需要兩組接口,因為C#也可以使用__stdcall調用約定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM