Originariamente inviato da giuseppe500
quindi basta che accedo sempre alla stessa versione?
Il problema è che se uso VID200.VIDObject non ottengo nessun clsid se è aperta la v12,mentre ottengo un clsid valido se è aperta la versione 11 forse perchè devo fare l'#import della versione 12?adesso uso un file .tlh generato da un precedente #import "filevid11.exe" dovrei quindi prima fare un #import "filevid12.exe" e poi usare il file tlh generato?
puo' essere questo? grazie adesso provo.
Per quanto riguarda la distribuzione?
Ciao.
Puoi fare l'import senza bisogno di includere i file generati. Basta inserire la direttiva #import nel file stdafx.h. Ci pensa visual studio a tutto il resto.
p. es. (nel file stdafx.h):
#import "C:\PROGRAMMI\FILE COMUNI\SYSTEM\ADO\MSADOX.DLL"
Per la distribuzione il componente com necessita la registrazione sulla macchina dell'utente. Puoi effettuarla a mano tramite il comandi RegSvr32 di Windows o richiamando la funzione dal programma di setup.
Per esempio:
codice:
#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
typedef HRESULT (*PF_DllRegisterServer)(void);
void MostraStringaErrore(DWORD dwErrore);
int main(int argc, char* argv[]);
void MostraStringaErrore(DWORD dwErrore)
{
CHAR achBuffer[255];
CHAR str[500];
::FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, dwErrore, LANG_SYSTEM_DEFAULT, achBuffer, 255, NULL);
wsprintf(str, "Errore n° %ld (Esadecimale %x)\n\nDescrizione : %s", dwErrore, dwErrore, achBuffer);
::MessageBox(NULL, str, "Errore MyRegsvr", MB_ICONSTOP|MB_OK);
}
int main(int argc, char* argv[])
{
HINSTANCE hinstLib;
HRESULT hr;
PF_DllRegisterServer pDllRegisterServer;
BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;
DWORD dwErrore;
if (argc <= 1 || argc > 3) {
printf("Modalita' d'uso del programma : \n");
printf("myregsvr nomelib [-u]\n");
printf("dove nomelib indica il nome di un file (.dll, .ocx, .exe) da registrare.");
printf("Usare l'argomento opzionale -u se si desidera deregistrare la libreria.");
return 1;
}
hinstLib = ::LoadLibrary(argv[1]);
if (hinstLib == NULL) {
printf("Impossibile caricare la libreria %s!\n", argv[1]);
dwErrore = ::GetLastError();
MostraStringaErrore(dwErrore);
fRunTimeLinkSuccess = FALSE;
}
else
{
printf("La libreria %s e' stata caricata con successo!\n", argv[1]);
if ( (argc == 3) && (strcmp(argv[2], "-u") == 0) )
pDllRegisterServer = (PF_DllRegisterServer) GetProcAddress(hinstLib, "DllUnregisterServer");
else
pDllRegisterServer = (PF_DllRegisterServer) GetProcAddress(hinstLib, "DllRegisterServer");
if (fRunTimeLinkSuccess = (pDllRegisterServer != NULL)){
hr = (pDllRegisterServer)();
if (FAILED(hr)){
dwErrore = ::GetLastError();
MostraStringaErrore(dwErrore);
fRunTimeLinkSuccess = FALSE;
}
else{
printf("La libreria %s e' stata registrata con successo!\n", argv[1]);
}
}
fFreeResult = FreeLibrary(hinstLib);
}
if (! fRunTimeLinkSuccess)
printf("Impossibile registrare la libreria %s !\n", argv[1]);
return 0;
}
Ciao