Вызов функций dylib в Office для Mac VBA

Я пытаюсь вызвать простую функцию, которая хранится в простом файле dylib, из простого макроса Word для Mac,

Я создаю .dylib с Xcode5 на OS-X Mountain Lion и вызываю его из Word для Mac 2011.

сначала libWord.dylib:

test.h

#ifndef __Word__Test__
#define __Word__Test__

bool testFunc();

#endif

test.cpp

#include "Test.h"
bool testFunc(){
return true;
}

и макрос:

Слово Макро

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 в Office 2011 для Mac

Вернуть строку в VBA в MacOSX

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

Выше должен работать (так же, как пульт должен быть именно там, где вы оставили его).
но, очевидно, я должен делать что-то не так, и любые указания относительно того, где искать, будут приветствоваться (чем очевиднее и стыднее, тем лучше).

1

Решение

Успех! (тьфу, это было там Все время?)

Этот урок кратко описывает основы вызова функций .dylib из VBA.

Просто обязательно установить инструменты командной строки Xcode так что вы можете использовать команду nm, чтобы получить символы из вашей библиотеки.

1

Другие решения

Вместо того, чтобы искать искаженное имя, я подозреваю, что самый простой способ — обернуть ваши объявления функций:

extern "C" {
bool testFunc();
}
1

По вопросам рекламы [email protected]