www.mikrocontroller.net

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


Autor: mike (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?

Autor: mike (Gast)
Datum:

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

Autor: mike (Gast)
Datum:

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

Autor: mike (Gast)
Datum:
Angehängte Dateien:

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

Autor: mike (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
...hier die Fehlermeldung

Autor: mike (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
In C# sieht das ganze so aus: Anlage

Autor: mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie macht man dies in C++ .NET?  (OHNE MFC)

Autor: mike (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es hier echt niemand der mir helfen kann?

Autor: mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die gute Unterstützung!

Autor: Helper (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gern geschehen

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: mike (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: mike (Gast)
Datum:
Angehängte Dateien:

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

Autor: mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Harald Lehn (harle)
Datum:

Bewertung
0 lesenswert
nicht 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 );

Autor: Zacc (Gast)
Datum:

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

Z

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.