Programmieren - alles kontrollieren 4.937 Themen, 20.662 Beiträge

Borland C++ Builder Fehlermeldung

serc / 19 Antworten / Flachansicht Nickles

In einer Headerdatei USB_Interface.h kommt bei den folgenden Zeilen:
#ifndef __AFXWIN_H__
#error include \'stdafx.h\' before including this file for PCH
#endif

folgender Fehler:
[C++ Fatal Error] USB_Interface.h(12): F1003 Error directive: include \'stdafx.h\' before including this file for PCH

Hab dann die stdafx.h eingebunden! Hat nichts gebracht kommt trotzdem noch der selbe Fehler!?
Was muß ich denn da machen!?

bei Antwort benachrichtigen
du musst... thomas woelfer
der punkt ist, thomas woelfer
Antwort Andreas42
Antwort mr.escape
Antwort ??? serc
Antwort ??? mr.escape
Antwort ??? serc
Antwort ??? mr.escape
Antwort ??? serc
Antwort ??? mr.escape
serc mr.escape „Antwort ???“
Optionen

Wenn das möglich ist, ist aber auch eine direkte verwendung im eigentlichen projekt möglich, d.h. ohne DLL sondern direkt gelinkt (aka statisch).

Wie geht das denn ohne DLL? wie kann ich dann die Funktionen ansprechen? Muß ich dann nur die cpp dem Projekt hinzufügen(Headerdatei benötige ich dann auch nicht oder?)? Hab hier nochmal den Code der cpp vieleicht kannst mir ein Beispiel machen!

// USB_Interface.cpp : Legt die Initialisierungsroutinen für die DLL fest.
//

#include "stdafx.h"
#include "USB_Interface.h"
//#include "CUSBInterface.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define BORLNDMM_DLL_NAME "borlndmm.dll"
#define AN21XX_DLL_NAME "an21xx.dll"
#define PascalString(s) (s+4)

static HINSTANCE m_hLibInstance = NULL;
static HINSTANCE m_hLibInstance2 = NULL;
static DWORD m_LastSystemError;


char *ConvertStringToPascalDLL(LPCSTR s)
{
UINT len = strlen(s);
char *s1 = new char[len+5];

memset(s1, '\0', len+5);
strcpy(s1+4, s);
*((DWORD *)s1) = len;

return s1;
}


BEGIN_MESSAGE_MAP(CUSB_InterfaceApp, CWinApp)
//{{AFX_MSG_MAP(CUSB_InterfaceApp)
// HINWEIS - Hier werden Mapping-Makros vom Klassen-Assistenten eingefügt und entfernt.
// Innerhalb dieser generierten Quelltextabschnitte NICHTS VERÄNDERN!
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

int __declspec(dllexport) __stdcall OpenLib(void)
{ int success = 0;

CString LibName;
/*
LibName=BORLNDMM_DLL_NAME;

if ((m_hLibInstance2 = LoadLibrary(LibName)) == NULL)
{ AfxMessageBox("Error: Loading Library borlndmm.dll failed");
}
else
{ success +=1;
}
*/
LibName=AN21XX_DLL_NAME;

if ((m_hLibInstance = LoadLibrary(LibName)) == NULL)
{ AfxMessageBox("Error: Loading Library an21xx.dll failed");
}
else
{ success +=2;
}


return success; // 0:fail, 1/2: only 1st/2nd DLL loaded, 3: ok
}

int __declspec(dllexport) __stdcall CloseLib(void)
{ int success = 0;


CloseAllDevices();

if(m_hLibInstance != NULL)
{ if (FreeLibrary(m_hLibInstance)) // returs 0 if it fails
success += 1; // success !!
}
if(m_hLibInstance2 != NULL)
{ if (FreeLibrary(m_hLibInstance2))
success += 2;
}
return success; // 0:fail, 1/2: only 1st/2nd DLL unloaded, 3: ok
}

int __declspec(dllexport) __stdcall ReOpen(void)
{ int success = 0;

CloseLib();

success = OpenLib();

return success;
}

/////////////////////////////////////////////////////////////////////////////
// CUSB_InterfaceApp Konstruktion

CUSB_InterfaceApp::CUSB_InterfaceApp()
{
// ZU ERLEDIGEN: Hier Code zur Konstruktion einfügen
// Alle wichtigen Initialisierungen in InitInstance platzieren
OpenLib();
}

/////////////////////////////////////////////////////////////////////////////
// Das einzige CUSB_InterfaceApp-Objekt wird hier konstruiert

CUSB_InterfaceApp theApp;


int __declspec(dllexport) __stdcall OpenDevice(BYTE DevNumber, char* DriverName, char* ID, char* KeyWord)
{

WORD (_stdcall *function)(BYTE, char *, char *, char *);

if (!(function = (WORD (_stdcall *)(BYTE, char *, char *, char *))GetProcAddress(m_hLibInstance, "OpenDevice")))
{
m_LastSystemError = GetLastError();
return FALSE;
}

char *s0 = ConvertStringToPascalDLL(DriverName);
char *s1 = ConvertStringToPascalDLL(ID);
char *s2 = ConvertStringToPascalDLL(KeyWord);

WORD retval = (*function)(DevNumber, PascalString(s0), PascalString(s1), PascalString(s2));

delete [] s0;
delete [] s1;
delete [] s2;

return (m_LastSystemError == 0);
}
int __declspec(dllexport) __stdcall SetInterrupt (BYTE DevNumber,BYTE IntNum,BYTE STATE)
{


void (_stdcall *function)(BYTE,BYTE,BYTE);

if (!(function = (void (_stdcall *)(BYTE,BYTE,BYTE))GetProcAddress(m_hLibInstance, "SetInterrupt")))
{
m_LastSystemError = GetLastError();
return FALSE;
}

(*function)(DevNumber, IntNum, STATE);

m_LastSystemError = 0;
return (TRUE);
}

int __declspec(dllexport) __stdcall SetRefreshTime (long RefreshTime)
{

void (_stdcall *function)(LONG);

if (!(function = (void (_stdcall *)(LONG))GetProcAddress(m_hLibInstance, "SetRefreshTime")))
{
m_LastSystemError = GetLastError();
return FALSE;
}

(*function)(RefreshTime);

m_LastSystemError = 0;
return (TRUE);
}

Thanks
serc

bei Antwort benachrichtigen
Antwort ??? mr.escape
Antwort ??? serc
Antwort ??? mr.escape
Antwort Andreas42