J'ai créé une bibliothèque ActiveX du générateur c + +. Quand j'ai fait mon premier OCX qui se connecte à la prise et vérifie la connexion et aussi lire de la prise et écrire sur le socket. Toutes les fonctions fonctionnent mais la fonction (Lire à partir du socket et envoyer la chaîne au conteneur ActiveX) renvoie le type BSTR (chaîne) qui ne fonctionne pas. après l'exécution du projet lorsque ce code a exécuté le programme soudainement fermé. Comment puis-je envoyer des données que j'ai lues depuis un socket vers un conteneur ActiveX avec cette fonction?pourquoi le programme C# est fermé lorsque j'ai utilisé ma méthode OCX avec le type de retour de chaîne?
//============ c++ builder xe8================
//I change the code to just return simple output"123"
//but it can not retun and c# program closed
BSTR STDMETHODCALLTYPE TSock4Impl::Read()
{
WCHAR ch[10];
ch[0]='1';
ch[1]='2';
ch[2]='3';
return ch;
}
//=============c# code ================
private void Form1_Load(object sender, EventArgs e)
{
//label1.Text = axVinaSock41.Read();
int a = axSock41.ConStatus();
label1.Text = Convert.ToString(a);
label1.Text = axVinaSock41.Read();// in this line the program was closed.
}
Peut-être que votre sortie est nulle ou endommagé. – MHM
Je ne pense pas. –
C'est en fait. 'Read()' n'alloue pas correctement la mémoire pour le BSTR de sortie. Utilisez la classe ['WideString'] (http://docwiki.embarcadero.com/Libraries/fr/System.WideString) pour vous aider à:' renvoyer WideString (ch, 3) .Detach(); 'sinon vous devez appeler ['SysAllocStringLen()'] (https://msdn.microsoft.com/fr-fr/library/windows/desktop/ms221639.aspx) directement: 'return SysAllocStringLen (ch, 3);' –