我目前正在寫在MacOSX上一個C動態庫,該功能在Excel(2011)使用VBA使用,例如:返回字符串VBA在MacOSX上
Declare Function TestF Lib "path_to_lib:mylib.dylib" Alias "test" (ByRef res As String) As String
這對於功能的工作原理罰款返回整數等,但我無法弄清楚如何將字符串傳遞迴VBA。我的C函數如下:
char* test(char *res)
{
res = "test";
return res;
}
但調用VBA函數TestF作爲
Dim res As String
res = TestF(res)
崩潰Excel文檔... 如果我使用的是由MathLink的(數學)庫提供的功能,例如
此函數成功地將一個字符串分配給我可以在VBA中使用的「res」。關於MLGetString的信息可以在這裏找到:http://reference.wolfram.com/mathematica/ref/c/MLGetString.html。
因此很明顯,這個功能能夠創建一個字符串,並將其傳遞給res
,我可以使用VBA字符串即可。那麼,任何想法如何這個函數做到這一點,或者我怎麼可以傳遞一個字符串到VBA而不必使用OLE等?
非常有幫助,謝謝!由於我在C(Mathematica的MathLink)中使用的其他庫顯然能夠將字符串傳遞給VBA而不使用OLE庫,我希望我也可以在我的函數中執行此操作?例如,當通過C函數將字符串參數傳遞給Excel時,函數[MLGetString](http://reference.wolfram.com/mathematica/ref/c/MLGetString.html)可以正常工作。 – Martin 2012-03-29 07:37:57
這其實是錯誤的。在Mac OS X中,VBA中'BSTR'的內存佈局並不像你描述的那樣是一個窗口'BSTR'。它使用一個以空字符結尾的'char *'字符串的內存佈局。 – 2016-03-11 11:11:38
在我的問題在這裏看到註釋2:http://stackoverflow.com/questions/35940136/bstrs-and-variants-under-mac-os-x – 2016-03-11 12:22:08