[C#] Come funziona la DllImport?

martedì 25 novembre 2008 - 10.10

yagamiraito Profilo | Newbie

In c++ ho una classe fatta più o meno cosi

class __declspec(dllexport) Mia_CLASSE { public: Mia_CLASSE(char *a); //costruttore void funzione1(char *b, char *c); void funzione2(int d); };

Per poter importare la dll e utilizzare classe e meotodi in C# come devo fare?
Dovrebbe essere una cosa cosi?

public class classecsharp { [DllImport("miadll.dll")] internal static extern void funzione1(string b, string c); [DllImport("miadll.dll")] internal static extern void funzione2(int d); [DllImport("miadll.dll")] internal static extern IntPtr Mia_CLASSE(string a); public prova() { IntPtr a = classecsharp.Mia_CLASSE("ciao"); classecsharp.funzione1("boh","boh"); classecsharp.funzione2(10); } }
L' importazione del costruttore è corretta così?
C'è qualcosa di sbagliato nell'utilizzo?


schumy2000 Profilo | Junior Member

Ciao.
La dichiarazione e l'importazione delle funzioni della dll è giusta.
Intanto tra le librerie hai usato la "System.Runtime.InteropServices" ?

Poi non capisco perche tu fai
IntPtr a = classecsharp.Mia_CLASSE("ciao"); //cosi non credo che funzioni

caso mai richiami il costruttore e all'interno di esso richiami la funzione importata e comunque
è un costruttore non può MAI tornarti un tipo.

-------------------------------------------------------------------------------------------------------------
Talvolta un pensiero mi annebbia l'Io: sono pazzi gli altri o sono pazzo io?
A. Einstein

yagamiraito Profilo | Newbie

>Ciao.
>La dichiarazione e l'importazione delle funzioni della dll è
>giusta.
>Intanto tra le librerie hai usato la "System.Runtime.InteropServices"
>?
Si, infatti non ho errori in fase di compilazione
E' in fase di esecuzione che ottengo l'eccezione "EntryPointNotFoundException".


>
>Poi non capisco perche tu fai
>IntPtr a = classecsharp.Mia_CLASSE("ciao"); //cosi non credo
>che funzioni
>
>caso mai richiami il costruttore e all'interno di esso richiami
>la funzione importata e comunque
>è un costruttore non può MAI tornarti un tipo.
>

Per chiamare il costruttore di una classe c++ in c# immagino, se è possibile farlo, debba importarlo. E questo era l'altro mio dubbio. Come si fa questa operazione correttamente?
Cioé queste due righe come dovrebbero diventare?
[DllImport("miadll.dll")]
internal static extern IntPtr Mia_Classe(string d);



schumy2000 Profilo | Junior Member

[DllImport("miadll.dll")]
internal static extern IntPtr Mia_Classe(string d);

beh questa è giusta anche se non ho mai sperimentato di mettere delle classi all'interno di una DLL.
però se vi è una classe credo che questa debba essere istanziata in qualche maniera e poi non puoi richiamare la classe semmai puoi richiamare i metodi della classe.
-------------------------------------------------------------------------------------------------------------
Talvolta un pensiero mi annebbia l'Io: sono pazzi gli altri o sono pazzo io?
A. Einstein
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5