Я создал 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.
Вы не смогли загрузить свою библиотеку. Проверьте, что происходит с 'GetLastError' – D3Hunter
Примечание:' mcc' является частью компилятора MATLAB, который предназначен для развертывания приложений MATLAB для конечных пользователей, у которых нет доступа к MATLAB. Тем не менее, он требует, чтобы конечный пользователь установил MCR (MATLAB Component Runtime) на своем компьютере, который можно свободно распространять, если у вас есть лицензия на MATLAB Compiler. Если вы хотите по-настоящему автономный код C, вы должны использовать MATLAB Coder. – am304
Из любопытства, есть ли причина, по которой вам нужно динамически загружать библиотеку вручную? Не могли бы вы просто связать с библиотекой и включить сгенерированные заголовки? –