Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Dll in C che restituisce un BSTR

    Devo creare delle funzioni in c che devono essere importate in VB.
    Alcune di queste devono restituire delle stringhe, per farlo so che devo usare il tipo BSTR.
    Mi è stato consigliato di usare la classe ATL CComBstr....

    codice:
    extern "C" BSTR APIENTRY prova{)
    {
    	CComBSTR ris("aaaaaaaaaaaaaaaaa");	
    	return ris.m_str;
    }
    perchè quando guardo il risultato da VB ogni 'a' è seguita dal 'quadratino'?
    Qualche consiglio o suggerimento??????????

  2. #2
    Io lo faccio in questo modo:

    codice:
    //char szString[255];
    
    extern "C" BSTR APIENTRY prova{)
    {
     return (SysAllocString((const unsigned short*)szString)); 
    }

  3. #3
    grazie mille....

    visto che mi sembra che tu conosca l'argomento ti chiedo anche come posso passare ua stringa per riferimento e come gestirne l'allocazione....

    Se provo a usare BSTR* come parametro nella funzione in C e uso byRef nella chiamata da VB mi ciocca....

    mi sai dire qualcosa?

    grazie ancora.

    PS un'altra cosa, la variabile szString che usi rimane allocata fino alla fine dell'esecuzione del programma in VB?

  4. #4
    Non sono un coder di windows ma posso dirti che però nel C i riferimenti non esistono. Un piccolo 'trucco' che si usa spesso in questi casi è quello di mandare la stringa come normale argomento e restituire il valore finale. Per farti capire, se tu vuoi che una stringa abbia il primo carattere cambiato puoi fare cosi:

    char *cane;
    cane = (char*)calloc(4, sizeof(char));
    strcpy(cane, "yuk");

    cane = cambiaprimval(cane);

    dove la funzione cambia primval e' cosi:

    char *cambiaprimval(char* str) {
    *str = 'f';
    return str;
    }

    ritorna, nel caso precedente, "fuk". Se usi il C++ allora non avrai problemi.

    bye
    There are 10 kinds of people in the world: who knows the binary numeration and who not

  5. #5
    Nelle dll non COM non puoi passare un BSTR per riferimento, perchè il runtime di VB in quei casi crea una copia della stringa in formato API (leggasi C) in modo che le api non si incasinino, puoi comunque passarla per valore e restituire una nuova BSTR come detto sopra.

  6. #6
    Originariamente inviato da riky78
    PS un'altra cosa, la variabile szString che usi rimane allocata fino alla fine dell'esecuzione del programma in VB?
    Yes! Più precisamente rimane allocata finchè usi la DLL

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 © 2025 vBulletin Solutions, Inc. All rights reserved.