Hilfe zu Microsoft Visual C++ .NET

Gast #506385
Lesenswert?

Hallo ich möchte die unit1.cpp Datei in Microsoft Visual C++ .Net 
einbinden.
Das ganze MFC gedönse möchte ich auf jedenfall nicht verwenden.
Wie kann ich diesen Code in die -NET Umgebung einfügen?
Die DLL habe ich bereits in meinen Projektordner reinkopiert.
Ich habe in .NET Probleme mit dem einbinden und verwenden von DLL 
Dateien.
HINSTANCE kennt .NET ja nicht.
Kann mir dazu jemand helfen?
Angehängte Dateien:
Gast #506777
Lesenswert?

Wenn ich den Code so ausführe erhalte ich folgende Fehlermeldung:

Eine nicht behandelte Ausnahme des Typs 
"System.AccessViolationException" ist in Oscilloscope.exe aufgetreten.

Zusätzliche Informationen: Es wurde versucht, im geschützten Speicher zu 
lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass 
anderer Speicher beschädigt ist.
Angehängte Dateien:
Gast #506781
Lesenswert?

Die Funktionen der DLL Datei lauten:

// File : OSC_DLL.H


#define DllName  "Osc_DLL.dll"

//extern  char *pEmpty = "";


struct tagTArrDbl {
double s1;
double s2;
double s3;
} ;

extern int (__cdecl  * ScopeAfterOpenLib)(int Prm);
extern int (__cdecl  *     ScopeCreate)   (int Prm ,char  *P_IniName, 
char *P_IniSuffix);
extern int (__cdecl  *     ScopeDestroy)  (int Prm);
extern int (__cdecl  *     ScopeShow)      (int Prm);
extern int (__cdecl  *     ScopeHide)       (int Prm);
extern int (__cdecl  *     ScopeShowNext)    (int Prm, struct 
tagTArrDbl *PrmD );
extern int (__cdecl  *     ScopeQuickUpDate)  (int Prm);

>>Ich bekomme es einfach nicht hin. WIE KANN ICH IN C++ .NET AUF DIE DLL 
>>ZUGREIFEN BZW. FUNKTIONEN AUFRUFEN?
Gast #507110
Lesenswert?

Hey Du machst da grundsätzlich was falsch nehme ich an.
Du musst unbedingt ein Projekt erstellen, dass keinen Gebrauch vom .NET 
Framework macht, wenn Du alten Code verwenden willst.
Dies geschieht automatisch, wenn man z.B. ein altes Visual Studio C++ 6 
Projekt in den neuen Visual Studios öffnet.

Wenn Zeit vorhanden ist, dann würde ich aber auf jeden Fall managed code 
programmieren und per P/Invoke auf die alten DLL's zugreifen.
Hier noch ein Link dazu:
http://msdn.microsoft.com/msdnmag/issues/03/07/NET/
Im Internet gibts dazu Beschreibungen wie Sand am Meer, am besten noch 
ein wenig suchen...
Gast #507541
Lesenswert?

Wie kann ich diesen Teil:
// create the scope
handle=ScopeCreate(0,new StringBuilder(IniName),new StringBuilder( 
IniSuffix));

für C++ .NET verwenden.
IniName und IniSuffix sind char Array. Wie kann ich dies in C++ .NET 
umsetzen?
#511885
Lesenswert?

 Beide zu übergebende Strings ( IniName, IniSuffix )
 in unmanaged Char Arrays umwandeln:

 System::IntPtr ipBSTR = Marshal::StringToBSTR( IniName );
 _bstr_t bstrIniName = (BSTR)ipBSTR.ToPointer();
 Marshal::FreeBSTR( ipBSTR );

 ipBSTR = Marshal::StringToBSTR( IniSuffix );
 _bstr_t bstrIniSuffix = (BSTR)ipBSTR.ToPointer();
 Marshal::FreeBSTR( ipBSTR );

 Dann Funktion aufrufen:

 handle=ScopeCreate(0, (char *)bstrIniName ,(char *)bstrIniSuffix );

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren