VC2008. Создаю новый проект Win32 DLL, пара строк кода.
+ Исходник DLL |
test.h
#ifdef TEST_EXPORTS
#define TEST_API __declspec(dllexport)
#else
#define TEST_API __declspec(dllimport)
#endif
extern "C" TEST_API int fntest(void);
test.cpp
#include "stdafx.h"
#include <windows.h>
#include "test.h"
__declspec(thread) char t[10];
//char t[10];
TEST_API int fntest(void)
{
int ret;
__try {
ret = t[0];
} __except(EXCEPTION_EXECUTE_HANDLER) {
ret = 256;
}
return ret;
}
|
Вызываю из Visual Foxpro
declare integer fntest in test.dll
? fntest()
Происходит исключение, получаю 256.
убираю __declspec(thread) - работает, получаю 0.
Из самодельного EXE все работает.
Так понимаю в вызывающем процессе чего-то нехватает, но чего? можно как-то полечить? Иначе много чего переписать придется чтобы избавиться от __declspec(thread)