2014-12-15 4 views
2

Я создал DLL простой функции в Matlab, используя следующую команду:Matlab сгенерированных Dll в C

mcc -t -L C -W lib:testfunctionLib -T link:lib testfunction.m libmmfile.mlib 

Простая функция выглядит так:

function y = testfunction(x) 
y = x + 10; 
end 

Мне нужно вызвать DLL с помощью с-код. Это то, что я использую, чтобы получить результат вычисления с дллами-функцией в текстовый файл:

#include <windows.h> 
#include <stdio.h> 

int main() 
{ 
    int z = 1; 
    FILE *Testfile; 

    typedef int(*BinaryFunction_t) (int); 
    BinaryFunction_t AddNumbers; 
    int   result; 
    BOOL    fFreeResult; 
    HINSTANCE   hinstLib = LoadLibraryA("testfunctionLib.dll"); 

if (hinstLib != NULL) 
    { 
    AddNumbers = (BinaryFunction_t)GetProcAddress(hinstLib, "testfunction"); 

    if (AddNumbers != NULL) 
     result = (*AddNumbers) (z); 

    fFreeResult = FreeLibrary(hinstLib); 

    Testfile = fopen("Testfile.txt", "a"); 
    fprintf(Testfile, "%i\n", result); 
    fclose(Testfile); 
    } 
else 
    { 
    Testfile = fopen("Testfile.txt", "a"); 
    fprintf(Testfile, "NOT"); 
    fclose(Testfile); 
    } 
} 

Я всегда получаю «НЕ» в моем текстовом файле, так как с-код не может экстракт функция из dll. Почему это не работает? C-код для получения dll-функции должен быть в порядке, я тестировал его с помощью DLL, созданной в visual studio.

+3

Вы не смогли загрузить свою библиотеку. Проверьте, что происходит с 'GetLastError' – D3Hunter

+1

Примечание:' mcc' является частью компилятора MATLAB, который предназначен для развертывания приложений MATLAB для конечных пользователей, у которых нет доступа к MATLAB. Тем не менее, он требует, чтобы конечный пользователь установил MCR (MATLAB Component Runtime) на своем компьютере, который можно свободно распространять, если у вас есть лицензия на MATLAB Compiler. Если вы хотите по-настоящему автономный код C, вы должны использовать MATLAB Coder. – am304

+1

Из любопытства, есть ли причина, по которой вам нужно динамически загружать библиотеку вручную? Не могли бы вы просто связать с библиотекой и включить сгенерированные заголовки? –

ответ

1

Я знаю, что библиотека не загрузилась, но я не получаю сообщение об ошибке. Я также попытался построить DLL с помощью Matlab Coder. Я получаю много разных файлов (c, h и т. Д.) И один DLL-файл, называемый testfunction. Но в том числе эта DLL все еще не работает.

+0

Это действительно не ответ и, скорее всего, будет комментарием, чтобы следить за тем, что сказал am304. –