Hallo Leute,
zuerst einmal bin ich neu in diesem Forum und auch im Programmieren nicht wirklich fortgeschritten. Nun soll ich eine statische Bibliothek in eine dynamische (dll) umwandeln habe auch ein Tutorial dazu gemacht habe aber trotzdem einige Probleme. Es werden in der Lib nämlich globale Variablen verwendet was soweit ich weiß in einer DLL nicht zulässig ist. Diese Variablen werden benötigt um sie mit einer Datenbank zu verknüpfen und später mit Werten zu belegen die aus der Datenbank ausgelesen werden. (Hier entsprechender Quellcode)
//////////////////////////////////////////////////////////////////////////
// CMaterialRecordset
IMPLEMENT_DYNAMIC(CMaterialRecordset, CRecordset)
CMaterialRecordset::CMaterialRecordset(CDatabase* pdb)
: CRecordset(pdb)
{
//{{AFX_FIELD_INIT(CMaterialRecordset)
m_Materialname = _T("");
m_Dichte = 0.0;
m_Wandreibwert = 0.0;
m_Wendelreibwert = 0.0;
m_Korndurchmesser = 0.0;
m_Materialinfo = _T("");
m_nFields = 6;
//}}AFX_FIELD_INIT
m_nDefaultType = snapshot;
}
CString CMaterialRecordset::GetDefaultConnect()
{
// BEGIN USER ADDED
CString defConnect;
defConnect.Format("ODBC; DSN=%s", DSN);
return defConnect;
// END USER ADDED
}
CString CMaterialRecordset::GetDefaultSQL()
{
return _T("[Material]");
}
void CMaterialRecordset:
oFieldExchange(CFieldExchange* pFX)
{
//Hier werden die Variablen mit der Datenbank verknüpft
//{{AFX_FIELD_MAP(CMaterialRecordset)
pFX->SetFieldType(CFieldExchange:
utputColumn);
RFX_Text(pFX, _T("[Materialname]"), m_Materialname);
RFX_Double(pFX, _T("[Dichte]"), m_Dichte);
RFX_Double(pFX, _T("[Wandreibwert]"), m_Wandreibwert);
RFX_Double(pFX, _T("[Wendelreibwert]"), m_Wendelreibwert);
RFX_Double(pFX, _T("[Korndurchmesser]"), m_Korndurchmesser);
RFX_Text(pFX, _T("[Materialinfo]"), m_Materialinfo);
//}}AFX_FIELD_MAP
}
//////////////////////////////////////////////////////////////////////////
// CMaterialRecordset diagnostics
#ifdef _DEBUG
void CMaterialRecordset::AssertValid() const
{
CRecordset::AssertValid();
}
void CMaterialRecordset:
ump(CDumpContext& dc) const
{
CRecordset:
ump(dc);
}
#endif //_DEBUG
so nun weiß ich nicht ob das mit den globalen Variablen zulässig bzw. wie man das entsprechend umschreiben kann mit lokalen Variablen, dass das trotzdem noch funktioniert.
Die dll lässt sich kompilieren so wie sie ist aber leider mit dem Prgramm nicht linken. Es kommen dann 42 Linker Fehler. alle LNK2001. Ich wäre euch echt sehr dankbar wenn ihr mir bei meinem Problem weiterhelfen könntet. Many thanks schon mal
DAVE
zuerst einmal bin ich neu in diesem Forum und auch im Programmieren nicht wirklich fortgeschritten. Nun soll ich eine statische Bibliothek in eine dynamische (dll) umwandeln habe auch ein Tutorial dazu gemacht habe aber trotzdem einige Probleme. Es werden in der Lib nämlich globale Variablen verwendet was soweit ich weiß in einer DLL nicht zulässig ist. Diese Variablen werden benötigt um sie mit einer Datenbank zu verknüpfen und später mit Werten zu belegen die aus der Datenbank ausgelesen werden. (Hier entsprechender Quellcode)
//////////////////////////////////////////////////////////////////////////
// CMaterialRecordset
IMPLEMENT_DYNAMIC(CMaterialRecordset, CRecordset)
CMaterialRecordset::CMaterialRecordset(CDatabase* pdb)
: CRecordset(pdb)
{
//{{AFX_FIELD_INIT(CMaterialRecordset)
m_Materialname = _T("");
m_Dichte = 0.0;
m_Wandreibwert = 0.0;
m_Wendelreibwert = 0.0;
m_Korndurchmesser = 0.0;
m_Materialinfo = _T("");
m_nFields = 6;
//}}AFX_FIELD_INIT
m_nDefaultType = snapshot;
}
CString CMaterialRecordset::GetDefaultConnect()
{
// BEGIN USER ADDED
CString defConnect;
defConnect.Format("ODBC; DSN=%s", DSN);
return defConnect;
// END USER ADDED
}
CString CMaterialRecordset::GetDefaultSQL()
{
return _T("[Material]");
}
void CMaterialRecordset:

{
//Hier werden die Variablen mit der Datenbank verknüpft
//{{AFX_FIELD_MAP(CMaterialRecordset)
pFX->SetFieldType(CFieldExchange:

RFX_Text(pFX, _T("[Materialname]"), m_Materialname);
RFX_Double(pFX, _T("[Dichte]"), m_Dichte);
RFX_Double(pFX, _T("[Wandreibwert]"), m_Wandreibwert);
RFX_Double(pFX, _T("[Wendelreibwert]"), m_Wendelreibwert);
RFX_Double(pFX, _T("[Korndurchmesser]"), m_Korndurchmesser);
RFX_Text(pFX, _T("[Materialinfo]"), m_Materialinfo);
//}}AFX_FIELD_MAP
}
//////////////////////////////////////////////////////////////////////////
// CMaterialRecordset diagnostics
#ifdef _DEBUG
void CMaterialRecordset::AssertValid() const
{
CRecordset::AssertValid();
}
void CMaterialRecordset:

{
CRecordset:

}
#endif //_DEBUG
so nun weiß ich nicht ob das mit den globalen Variablen zulässig bzw. wie man das entsprechend umschreiben kann mit lokalen Variablen, dass das trotzdem noch funktioniert.

DAVE