Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]com e c#

    ciao, ho questo file con un interfaccia che espone i metodi di una classe in c#.
    codice:
            public interface ICDeserialize
    	{
    		long dox(ref int i, ref Int64 res);
    		void proprieta(Int64 nPippo, Int64 nPippo2);
    	}
    
    	public class CDeserialize
    	{
    		public CDeserialize()
    		{
    			//
    			// TODO: Add constructor logic here
    			//
    		}
    	
    		public long dox(ref Int64 i, ref Int64 res)
    		{
    			i = 10;
    			return 1;
    		}
    		public long proprieta(int nPippo, int nPippo2)
    		{
    			nPippo = 2;
    		}
    Adesso ho compilato il file con regasm e ho creato un .tlb.
    Poi importo il tlb in c++ e richiamo le funzioni, cosi:
    codice:
    .
    #import "ifc2.tlb"
    .
    .
    CoInitialize(NULL);
    	IFC2::ICDeserializePtr ptr;
        CLSID clsid; 
    	
    	IUnknown *punk;
    	
    	HRESULT hr = CLSIDFromProgID(L"IFC2.CDeserialize", &clsid);
    	
    	//CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, __uuidof(IFC), (LPVOID *)&valid); 
    
    	hr = CoCreateInstance(clsid, NULL,CLSCTX_INPROC_SERVER, IID_IUnknown, (void **)&punk) ;
    	hr = punk->QueryInterface(__uuidof(IFC2::_CDeserialize), (void**)&ptr);
    	long x = 0;
    	INT64 h = 0;
    	hr = ptr->dox(&x,&h);	************************************errore
    	CoUninitialize();
    Il problema è che finchè utilizzo dei metodi senza puntatori e senza tipi ritornati in c++ funziona, quando provo a passare dei puntatori o a farmeli ritornare ottengo un errore

    Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.

    questa è la dichiarazione del metodo nel file .tli creato dall importazione della libreria com .tlb generata dal regasm:

    inline __int64 ICDeserialize::dox ( long * i, __int64 * res ) {
    __int64 _result = 0;
    HRESULT _hr = raw_dox(i, res, &_result);
    if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
    return _result;
    }
    Come devo impostare la funzione per farmi ritornare unpuntatore?
    grazie.

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    credo tu debba metterla come out..

    codice:
    long dox(ref int i, out Int64 res);

  3. #3
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    L'argomento occupa almeno 5 pagine nel mio libro.
    Il problema comunque è che non esponi correttamente la classe C# come server COM
    Cerca C# com callable wrapper con google per avere degli esempi.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]IFC e interop c# c++

    risolto , grazie shodan.
    non avevo inserito la dll compilata in c# nel path dell'applicazione c++.
    Adesso mi ritrovo ad avere una la lista di classi dell' ifc(industry fondation class).
    Se deserializzo, correttamente ,mi vengono restituiti gli oggetti riempiti con i dati dell xml.
    Il problema è questo:
    I metodi e le proprietà di questi oggetti non sono esposti , mi appaiono solo i classici membri com.
    Devo creare delle interfacce e farle implementare alle classi per rendere visibili questi metodi?
    o c'è un metodo migliore?
    esiste un qualche tool che lo fa in automatico?
    Grazie.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    In particolare vorrei realizzare un object model in c++ , cosi ' com è in c# con ad es l'incapsulamento delle classi ,
    IFCRoot
    ---->IFCHeader
    ---->IFCGeometry---->IFCWall--->IFCcoord
    ---->IFCMaterials

    ognuna di queste classi è senza membri in c++ non ha interfacce e non è possibile navigare il modello, come posso esporre i membri di ciascuna classe e rendere possibile navigare nell' object model?
    per es
    IFCRoot.IFCGeometry.IFCWall.IFCCoord
    grazie.

  6. #6
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Non ho mica capito ciò che vuoi fare. Puoi essere più chiaro?
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  7. #7
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Originariamente inviato da shodan
    L'argomento occupa almeno 5 pagine nel mio libro.
    Il problema comunque è che non esponi correttamente la classe C# come server COM
    Cerca C# com callable wrapper con google per avere degli esempi.
    Che libro?
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  8. #8
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  9. #9
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    E tu quale autore saresti?
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  10. #10
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    ????

    E' "mio" perché l'ho comprato, non perché l'ho scritto.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.