2010-10-27 7 views
3

Je dois passer un tableau de variantes vide à une DLL écrite en C (et disponible sur toutes les versions de Windows), et le code C (sur lequel je n'ai aucun contrôle et que je ne peux modifier) ​​remplira le tableau de variantes vide certaines valeurs de retour. Basiquement, quand j'essaye ceci - le tableau ByRef est toujours vide quand il devrait contenir les résultats de la fonction/sous-appel (si je fais exactement la même chose dans .NET, cela fonctionne).Comment transmettre un tableau (par référence, dans VB6) à un sous-programme C C++ * .dll?

Je pense que je dois faire une déclaration personnalisée pour que VB sache comment appeler la fonction C, ou?

Voici comment la sous-fonction C/est déclarée. Compte tenu de cela, que dois-je faire pour que C puisse utiliser correctement ma matrice vide et que je reçoive mes résultats?

HRESULT InvokeAction(
    [in]  BSTR bstrActionName, 
    [in]  VARIANT varInActionArgs, 
    [in, out] VARIANT *pvarOutActionArgs, 
    [in, out] VARIANT *pvarRetVal 
); 

Plus d'informations sur cette fonction: http://msdn.microsoft.com/en-us/library/aa382237(VS.85).aspx

Merci

Répondre

3

De http://msdn.microsoft.com/en-us/library/aa381230(VS.85).aspx:

Dim returnVal 
Dim outArgs(1) 
Dim args(1) 
args(0) = 3 
returnVal = service.InvokeAction("GetTrackInfo", args, outArgs) 
'return Val now contains the track length 
'and outArgs(0) contains the track title 
Dim emptyArgs(0) 
returnVal = service.InvokeAction("Play", emptyArgs, emptyArgs) 
'returnVal indicates if the action was successful 

Juste comment vous obtenez et exemple de service n'est pas clair dans cet exemple cependant.

+0

@patrick, merci pour votre message, le problème est, quand je passe l'argument selon les spécifications, les outArgs sont toujours vides (cependant, l'action s'exécute, juste les outArgs ne sont pas reçus). donc j'ai pensé qu'il s'agissait d'un problème d'interopérabilité entre C et VB6, j'ai essayé de passer les arguments de plusieurs façons, pensez-vous que je dois faire un "Private Sub Declare InvokeAction ... Lib" upnp.dll "... "ou quelque chose à cet effet pour le faire fonctionner? J'ai déjà le service d'un pour chaque boucle, et tout le reste dans upnp.dll (services/appareils etc) fonctionnent tous correctement, juste obtenir les outArgs ne ... –

+0

+ aucune exception n'est levée non plus, outArgs est inchangé sur réponse. –

+0

juste pour ajouter, même si j'utilise retVal et cherche une variable de retour, qui est aussi vide, tout comme outArgs, à chaque fois. J'ai essayé ceci sur plusieurs actions invocables maintenant. J'ai même essayé de démarrer un nouveau projet/vide, rajouter les références, etc ... en vain. aussi, cela fonctionne parfaitement quand je le fais dans vb.net ou C#, selon les spécifications, pas un problème du tout. –

Questions connexes