在Office for Mac VBA中调用dylib函数

时间:2014-03-18 05:10:51

标签: c++ macos vba dylib

我试图从一个简单的Word for Mac宏调用一个存储在简单dylib文件中的简单函数,

我在OS-X Mountain Lion上使用Xcode5创建.dylib,并在Word for Mac 2011中调用它。

首先是libWord.dylib:

Test.h

#ifndef __Word__Test__
#define __Word__Test__

bool testFunc();

#endif

Test.cpp的

#include "Test.h"

bool testFunc(){
    return true;
}

和宏:

Word宏

Private Declare Function testFunc Lib "/Users/usrName/Documents/libWord.dylib" () As Boolean

Sub TestLibFunc()

    Dim b As Boolean
    b = testFunc
    StatusBar = b

End Sub

宏可以找到dylib(我放在上面的目录中),但不断抛出:

"运行时错误' 453': 未找到指定的DLL函数"

我也尝试将该函数声明为类的一部分:

class testClass{
    static bool testFunc();
}

bool testClass::testFunc(){
    return true;
}

然后尝试使用上面的Declare语句和一个带别名的语句来调用它:

Private Declare Function testFunc Lib "/Users/usrName/Documents/libWord.dylib" Alias "testClass::testFunc" () As Boolean

我也试过更换" /"用":"在库路径名中,所有这些都给出了相同的结果。

那么,我错过了什么?就我见过的所有例子而言:

VBA Shell function in Office 2011 for Mac

Return string to VBA in MacOSX

http://social.msdn.microsoft.com/Forums/en-US/b060f291-0754-4e85-a7b9-e64259e6baad/vba-using-shared-library-office-2011-mac?forum=isvvba

上面的应该工作(就像遥控器应该正好在你离开的地方一样)。 但显然我必须做错事,任何关于在哪里看的指针都会受到欢迎(更明显和羞耻更好)。

2 个答案:

答案 0 :(得分:1)

成功! (呃,它一直那里?)

This tutorial简洁地介绍了从VBA调用.dylib函数的基础知识。

请务必install Xcode Command-Line Tools,以便您可以使用nm命令从库中获取符号。

答案 1 :(得分:1)

我怀疑最简单的方法是包装你的函数声明,而不是查找错位的名称:

extern "C" {
bool testFunc();
}