2015-08-26 146 views
0

實際上,我正在玩接口c/C++和Excel-2011 for mac的VBA。我怎麼能在dylib中設計以指針爲參數或引用的函數?或數組?甚至是簡單的結構?在windows下,VARIANT讓我來做所有事情,但是我不能在OS X(甚至是Linux下)下使用它。傳遞c/C++ dylib函數將指針指向VBA上的指針

正如評論,到現在爲止,我可以(包括「簡單」型)做這樣的事情:

我有下面的代碼配置:在tmp3class.h:

class TheClass 
{ 
     public: 
      double mysum(double x ,double y); 
}; 

在tmp3class.cpp:

#include "./tmp3class.h" 

double TheClass::mysum(double x ,double y) 
{ 
     return x+y ; 
} 

和tmp3.cpp:

#include "./tmp3class.h" 

extern "C" 
{ 
     double THESUM(double x, double y) 
     { 
      TheClass TheObj ; 
      double res = TheObj.mysum(x,y); 
      return res ; 
     } 
} 

我編譯這個用:

g++-5.2.0 -m32 -Wall -g -c ./tmp3class.cpp -o ./tmp3obj.o 
g++-5.2.0 -m32 -dynamiclib .tmp3.cpp ./tmp3obj.o -o ./tmp3.dylib 

,然後在VBA我這樣做:

Declare Function THESUM Lib "/Users/XXXXXX/Documents/GITHUBRepos/DYLIBS/MyFirstDylib/tmp3.dylib" (ByVal x As Double, ByVal y As Double) As Double 

Function THESUM_VBA(x As Double, y As Double) As Double 
    THESUM_VBA = THESUM(x, y) 
End Function 

THESUM_VBA很完善的功能。

回答

0

這裏是一個答案在陣列的情況下(被設計感謝到this):通過從C++的陣列(雙)練成-2011的(MAC)VBA,C++函數應該在其簽名double *代表指向數組的第一個係數的指針,int(或long等),表示數組大小。例如,服用的陣列,並且由一個參數值的所有係數相乘的功能將被編碼的是這樣的:C++代碼是:

extern "C" 
{ 
     void multarray(double * array, int size, double coeff) 
     { 
      for (int i = 0 ; i < size ; ++i) 
      { 
        array[i]*=coeff; 
      } 
     } 
} 

編譯:

g++ -m32 -Wall -g -c ./tmp4.cpp 
g++ -m32 -dynamiclib ./tmp4.o -o ./tmp4.dylib 

現在VBA應引用所述dylib如下:

Declare Sub multarray Lib "/Users/XXXXXX/Documents/GITHUBRepos/DYLIBS/MyFirstDylib/tmp4.dylib" (ByRef firstcoeff As Double, ByVal size As Long, ByVal coeff As Double) 

multarray的第一個參數代表陣列,的第一系數,並且必須由REF被傳遞erence。下面是利用的爲例:

Public Sub DoIt() 
    Dim multarraofdoubles(3) As Double 
    multarraofdoubles(0) = -1.3 
    multarraofdoubles(1) = 4.6 
    multarraofdoubles(2) = -0.67 
    multarraofdoubles(3) = 3.13 
    Dim coeff As Double 
    coeff = 2# 
    Call multarray(multarraofdoubles(0), 4, coeff) 
End Sub 

上述link包含許多其他有趣的例子中,用於字符串(與BSTR的),字符串數組,簡單結構等,能夠很容易地適應gcc和本MAC OS(/ linux)上下文。我正在考慮設計一個簡單的VARIANT類來處理所有這些。