Forum: PC-Programmierung Hilfe zu Microsoft Visual C++ .NET


von mike (Gast)


Angehängte Dateien:

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?

von mike (Gast)


Lesenswert?

Die Unit1.cpp Datei wurde unter Borland Builder C++ erstellt.
Unter Borland funktioniert auch die ganze Geschichte.

von mike (Gast)


Lesenswert?

Dazu kann mir offensichtlich niemand helfen.
Bin für jede Hilfe sehr sehr dankbar!

von mike (Gast)


Angehängte Dateien:

Lesenswert?

Ich verstehe nicht warum der Microsoft Visual C++ .NET 2005 Compiler bei 
mir mekert.

von mike (Gast)


Angehängte Dateien:

Lesenswert?

...hier die Fehlermeldung

von mike (Gast)


Angehängte Dateien:

Lesenswert?

In C# sieht das ganze so aus: Anlage

von mike (Gast)


Lesenswert?

Wie macht man dies in C++ .NET?  (OHNE MFC)

von mike (Gast)


Angehängte Dateien:

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.

von mike (Gast)


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?

von mike (Gast)


Lesenswert?

Gibt es hier echt niemand der mir helfen kann?

von mike (Gast)


Lesenswert?

Vielen Dank für die gute Unterstützung!

von Helper (Gast)


Lesenswert?

gern geschehen

von Johnny (Gast)


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...

von mike (Gast)


Angehängte Dateien:

Lesenswert?

Hallo jonny danke für die Infos.
Auf die DLL greife ich per INVOKE zu. Ich habe zuerst eine neu 
WinForms-Anwendung erstellt.
Ich habe jetzt Probleme mit dem Zugreifen auf die einzelnen Funktionen 
von der DLL.

von mike (Gast)


Angehängte Dateien:

Lesenswert?

In C# sieht das ganze so aus.
Die Umsetzung von C# in C++ macht mir halt noch Probleme.

von mike (Gast)


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?

von Harald L. (harle)


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 );

von Zacc (Gast)


Lesenswert?

Mike,
du solltest fuer solche Probleme eine Microsoft newsgruppe besuchen. 
Dort sind beliebig viele kompetente Spezialisten zu finden.

Z

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.