C# und C++ DLLs

sirvival

Erfahrenes Mitglied
Hallo allerseits,

ich habe mal eine kurze Frage zu C# und unmanaged DLLs.

Wie kann ich mittels c# aus einer in C++ geschriebenen DLL cahr Pointer auslesen und setzen?
Geht das nur mittels unsafe Code oder gibt es da auch noch andere Möglichkeiten?

Code:
using System;

namespace DllTestKlasse
{
	class Class1
	{
		[System.Runtime.InteropServices.DllImport("testDLL.dll")]
		public static extern void DisplayTextDLL (int i);	

		[System.Runtime.InteropServices.DllImport("testDLL.dll")]
		public static extern void setNewPath (char *path);	 <---- ?_?

		[System.Runtime.InteropServices.DllImport("testDLL.dll")]
		public static extern void getNewPath (char **path);	 <---- ?_?

			
		
		[STAThread]
		static void Main(string[] args)
		{
			Console.WriteLine ("Text aus C#");
			DisplayTextDLL(10);

			string path = "C:\\testfolder\testfile.txt";
			setNewPath (?_?); 

			string newPath = getNewPath (?_?); 
			Console.WriteLine (newPath); 

			Console.ReadLine();
		}
	}
}
 
Hi

Wenn die Schnittstelle, die du verwenden willst eine einfach C++ Schnittstelle ist, musst du dies über DLL import machen.
COM-Dlls kannst du einfach als Referenz hinzufügen. Es wird dann automatisch eine Interop erstellt, die alles solche Probleme für dich übernimmt.

Wie es mit den Char-pointern ausschaut kann ich dir nicht sagen. Hier ist aber ein Link zu einem Programm, welches dir vielleicht weiter helfen könnte.
 
Hi

Wenn die Schnittstelle, die du verwenden willst eine einfach C++ Schnittstelle ist, musst du dies über DLL import machen.
COM-Dlls kannst du einfach als Referenz hinzufügen. Es wird dann automatisch eine Interop erstellt, die alles solche Probleme für dich übernimmt.

Nur, wenn die TPL existiert
 
Hey Leute Danke für eure Posts.

Ich werde mir das ganze am WE mal zu Gemüte führen und mich später nochmal melden.

;)
 
Weiss zufällig jemand, wie man an den Quellcode der automatisch erstellten Interop Assemblies kommen kann?
 
Danke, Danke, Danke, das Ding hat mir stundenlange Tüdelarbeit bei dem Beseitigen eines DLL-Chaos erspart.

Und wo wir grad dabei sind (für den Falle, dass eine Interop Assembly abartig gross ist:

Gibt es eine Möglichkeit möglichst zeitsparend mehrere Interop Assemblies zu einer zusammenzufassen (ausgenommen mein grad angepeilter Weg, alles von Hand per Copy-Paste in Quellcode zu verwandeln)

MfG
Passer
 

Neue Beiträge

Zurück