Недавно я обнаружил проблему с компилятором Visual C ++ 2008, но с помощью незначительного взлома избегайте ее. В настоящее время я не могу использовать тот же хак, но проблема существует как в 2008 году, так и в 2010 (Express).
Итак, я подготовил для вас 2 простых файла C: один для DLL, другой для программы:
DLL (file-dll.c):
#include <stdio.h>
__declspec(dllexport) void
print_to_stream (FILE *stream)
{
fprintf (stream, "OK!\n");
}
И для программы, которая связывает эту DLL через файл-dll.lib:
Программа:
#include <stdio.h>
__declspec(dllimport) void print_to_stream (FILE *stream);
int
main (void)
{
print_to_stream (stdout);
return 0;
}
Чтобы скомпилировать и связать DLL:
cl /LD file-dll.c
Для компиляции и компоновки программы:
cl file-test.c file-dll.lib
При вызове file-test.exe я получил фатальную ошибку (похожую на ошибку сегментации в UNIX).
Как я уже говорил ранее, у меня была та же проблема: перед передачей указателя FILE * в DLL. Я думал, что это может быть из-за несоответствия компилятора, но теперь я использую один компилятор для всего, и это не проблема. ; - (* 1 021 *
Что мне теперь делать?
1024 * *
UPD 1026 * *:
Я нашел решение:
cl /LD /MD file-dll.c
cl /MD file-test.c file-dll.lib
Ключ заключается в том, чтобы связываться с динамической библиотекой, но (я не знал этого) по умолчанию она связывает статически, и (следовательно) возникает ошибка (я понимаю почему).
P.S. Спасибо за терпение.