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

    [c++]problema istanza e var static

    ciao.
    ho la seguente definizione di un .h
    codice:
    #pragma once
    class CEntityDS;
    
    class CImportDS
    {
    public:
    	CImportDS(){};
    	~CImportDS(){};
    	static CEntityDS* (*m_pFn)();
    	static int test;
    	virtual void * Pippo() {return m_pFn;};
    };
    
    class CImportBeamDSChess : public CImportDS
    {
    public:
    	CImportBeamDSChess();
    	~CImportBeamDSChess();
    	static CEntityDS* (*m_pFn)();
    	virtual void * Pippo();
    };
    
    class CImportConnectType : public CImportDS
    {
    public:
    	CImportConnectType();
    	~CImportConnectType();
    	static CEntityDS* (*m_pFn)();
    	virtual void * Pippo();
    };
    
    extern "C" {
     __declspec(dllexport)  void* GetPippo(CImportDS* pImpDs);
    }
    in questo modo devo poter accedere alle variabili statiche dall esterno della classe.
    Il problema è che:
    codice:
    #include "stdafx.h"
    #include "ImportDS.h"
    
    int CImportDS::test = 0;
    CEntityDS* (*CImportDS::m_pFn)();
    //CBeamDSChess
    CEntityDS* (*CImportBeamDSChess::m_pFn)();
    //CConnectType
    CEntityDS* (*CImportConnectType::m_pFn)();
    CImportBeamDSChess::CImportBeamDSChess()
    {
    }
    
    CImportBeamDSChess::~CImportBeamDSChess()
    {
    }
    
    void * CImportBeamDSChess::Pippo()
    {
    	return CImportBeamDSChess::m_pFn;
    }
    
    CImportConnectType::CImportConnectType()
    {
    }
    
    CImportConnectType::~CImportConnectType()
    {
    }
    
    void * CImportConnectType::Pippo()
    {
    	return CImportConnectType::m_pFn;
    }
    
    
    extern "C" {
    	 __declspec(dllexport)  void* GetPippo(CImportDS* pImpDs) {
    	
    		return pImpDs->Pippo();
    		
    	 }
    }
    Il tipo che puo essere CimportConnectType o CImportBeamDSChess viene creato a runtime e non so di cosa sarà, per questo ho provato a passare CimportDS(il tipo base dei due tipi, nella funzione che crea passo il tipo relativo) e utilizzarlo col polimorfismo per andare a leggere il puntatore a funzione corretto.
    Il problema è che è sempre a 0 !
    anche dopo che lo setto con :
    codice:
    void CModelImportFEM::ImportEntityDS(CCmpImportApi *pApi)
    {
    	CImportBeamDSChess::m_pFn = &CreateDS<CBeamDSChess>;
    	CImportConnectType::m_pFn = &CreateDS<CBeamDSConnType>;
    	//for(pApi->DSReset(); pApi->NextDS();)
    	//{
    		int nEntityID = -1, nEntityType = CImportBeamDSChess::test = 10;
    	  //funzione che crea il tipo opportuno da una lettura file e ritorna il creator nella forma   base per renderlo generico , in futuro potro avere molte classi creator
              CImportDS* pImpDS = pApi->ImportEntityDS(&nEntityID, &nEntityType);
    	//a questo punto faccio:
    HMODULE mod=GetModuleHandle("C:\\factory\\CT\\Debug\\C.exe");
    		pFunc = (void *(__cdecl *)(CImportDS*)) GetProcAddress(mod, "GetPippo");//(CEntityDS *(__cdecl *)(void)) pImpDS->Pippo();
    		CImportDS* pIDs = (CImportDS*)pFunc(pImpDS);			
    		//chiamo la funzione , pIDs->m_pFn che dovrebbe ritornarmi uno degli indirizzi che ho impostato qui:
    CImportBeamDSChess::m_pFn = &CreateDS<CBeamDSChess>;
    	CImportConnectType::m_pFn = &CreateDS<CBeamDSConnType>;
    		CEntityDS* pds =  pIDs->m_pFn();

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    scusate per gli ultimi due post , non stavo bene ,ero un po accaldato
    chiedo scusa.

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.