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?
Die Unit1.cpp Datei wurde unter Borland Builder C++ erstellt. Unter Borland funktioniert auch die ganze Geschichte.
Dazu kann mir offensichtlich niemand helfen. Bin für jede Hilfe sehr sehr dankbar!
Ich verstehe nicht warum der Microsoft Visual C++ .NET 2005 Compiler bei mir mekert.
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.
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?
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...
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.
In C# sieht das ganze so aus. Die Umsetzung von C# in C++ macht mir halt noch Probleme.
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?
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 );
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.