PDA

View Full Version : [C#/C++] importare libreria


morskott
11-02-2008, 22:00
Salve, avrei 2 classi scritte in linguaggio C++ che vorrei utlilizzare as is nel mio progetto scritto in C#, sapendo che compilando con Visual Studio 2k8 (che funziona su tecnologia .net) avrei avuto una dll il CLR che avrei poi importato come reference nel mio progetto in C# (con IDE sharpDevelop (perchè altri componenti del gruppo non possono usare VS)), ma andandolo ad importare mi dice che Error loading code-completion information for ASEImporter from C:\Users\Evangelist\Documents\Visual Studio 2008\Projects\ASEImporter\Release\ASEImporter.dll:
Error loading assembly:
Mono.Cecil.Binary.ImageFormatException: Non CLI Image
in Mono.Cecil.Binary.ImageReader.VisitCLIHeader(CLIHeader header)
in Mono.Cecil.Binary.Image.Accept(IBinaryVisitor visitor)
in Mono.Cecil.Binary.ImageReader.Read(String file)
in Mono.Cecil.AssemblyFactory.GetAssembly(String file)
in ICSharpCode.SharpDevelop.Dom.CecilReader.LoadAssembly(String fileName, ProjectContentRegistry registry)
in ICSharpCode.SharpDevelop.Dom.ProjectContentRegistry.LoadProjectContent(String itemInclude, String itemFileName)
in ICSharpCode.SharpDevelop.Dom.ProjectContentRegistry.GetProjectContentForReference(String itemInclude, String itemFileName) (un errore molto simile l'ho avuto andandolo a importare per prova direttamente in VS), che io sappia un sorgente compilato in un qualsiasi linguaggio .net (come con Visual Studio 2k8) diventa indipendente dal linguaggio di origine ed utilizzabile con tutti gli altri linguaggi .net (come lo è il C#), perchè la teoria non è mai riportata as is nella pratica?????
Vabbeh, scherzi a parte come se po risolve?

gugoXX
12-02-2008, 00:11
Si sono 2 tipi di C++.
Quello compatibile con il C# e il VB.net perche' compilato in IDL, che si chiama C++.net
E quello classico, che si chiama solo C++, e che usa MFC, SDK o altro, e nulla ha di framework perche' non lo richiede neppure. Ovviamente non e' compatibile con il C#, se non previo codice unsafe e non e' semplicissimo farli parlare insieme.

Ho idea che tu abbia usato il secondo, dato che mi sembra di aver capito che le classi erano in una DLL scritta in C++ preesistente al Framework.

Ma i sorgenti ce li hai ancora?
Erano classi pure o usavano MFC, SDK o altro ancora?

0rph3n
12-02-2008, 09:11
Platform Invoke.
Ecco un tutorial dell' MSDN (http://msdn2.microsoft.com/en-us/library/aa288468(VS.71).aspx).

'iao

morskott
12-02-2008, 12:39
Si sono 2 tipi di C++.
Quello compatibile con il C# e il VB.net perche' compilato in IDL, che si chiama C++.net
E quello classico, che si chiama solo C++, e che usa MFC, SDK o altro, e nulla ha di framework perche' non lo richiede neppure. Ovviamente non e' compatibile con il C#, se non previo codice unsafe e non e' semplicissimo farli parlare insieme.

Ho idea che tu abbia usato il secondo, dato che mi sembra di aver capito che le classi erano in una DLL scritta in C++ preesistente al Framework.

Ma i sorgenti ce li hai ancora?
Erano classi pure o usavano MFC, SDK o altro ancora?

Io ho solo il sorgente, che poi ho compilato tramite il Visual Studio 2008 (che quindi "dovrebbe" usare il C++.net, se ho capito bene (a quanto pare no)