Firstly You must export if you are compiling the DLL, or import if you are compiling something using the DLL.
I am not sure what #define VC6 does in the dll to mark this, but VS08 uses _USRDLL.
You can find this by going to the project properties for the DLL then going to the C/C++ then Preprocessor.
If there isnt something in there that seems to be a definition for compiling the DLL add your own _USRDLL
#if defined(_USRDLL) || defined(_DLL)
#ifdef __cplusplus
#define PORT extern "C" __declspec(dllexport)
#else
#define PORT __declspec(dllexport)
#endif
#else
#ifdef __cplusplus
#define PORT extern "C" __declspec(dllimport)
#else
#define PORT __declspec(dllimport)
#endif
#endif
typedef tagSTRING_A {
char *str;
int i;
} STRING_A;
typedef tagSTRING_W {
wchar_t *str;
int i;
} STRING_W;
#ifdef UNICODE
#define STRING STRING_W
#else
#define STRING STRING_A
#endif
I dont know why it isn't detecting the data type. It could be an issue with your symbols database, VS08 occasionally has this problem.
Im not sure what file extension VC6 uses, but in the main project directory there should be a file (<workspace name="">.ncb in VS08) that holds all the symbols. If you close your solution and delete (or better, rename) this file, Visual Studio will recreate it, hopefully getting rid of any errors.