Как использовать COM для передачи строки из c # в c ++? - PullRequest
0 голосов
/ 07 июня 2011

когда я пытаюсь вызвать код c # из c ++, я следовал инструкциям из этой статьи

http://support.microsoft.com/kb/828736

часть моего c #:

[Guid("6A2E9B00-C435-48f8-AEF1-747E9F39E77A")]
public interface IGameHelper
{
 void getInfo(out string result);
}

public class GameHelper : IGameHelper
{
 void getInfo(out string result)
 {
  result =  new StringBuilder().Append("Hello").ToString();
 }

}

частьмоего кода на C ++:

#import "../lst/bin/Release/LST.tlb" named_guids raw_interfaces_only
using namespace LST;
using namespace std;

...
HRESULT hr = CoInitialize(NULL);
IGameHelperPtr pIGame(__uuidof(GameHelper));
BSTR ha = SysAllocString(NULL);
pIGame->GetInfo(&ha);
wprintf(_T(" %s"),ha);
SysFreeString(ha);

, но я просто не могу получить строковое значение результата, оно прекрасно работает, когда я пытаюсь получить целочисленные результаты, но не строковое.

Я не знаю COM оченьмного.ПОМОГИТЕ МНЕ, ПОЖАЛУЙСТА.Спасибо.

Ответы [ 3 ]

0 голосов
/ 08 июня 2011

Обычно ваш код должен работать, но сначала убедитесь, что он правильно компилируется, так как void getInfo(out string result) внутри GameHelper должно быть общедоступным.Затем снова pIGame->GetInfo(&ha); следует исправить с помощью getInfo.Возможно, вы используете старую версию кода.

0 голосов
/ 20 декабря 2013

Измените свой код C # на:

[Guid("6A2E9B00-C435-48f8-AEF1-747E9F39E77A")]
public interface IGameHelper
{
    string getInfo();
}


public class GameHelper : IGameHelper
{
    public string getInfo()
    {
       return "Hello World";
    }

}

Тогда ваш клиент C ++:

HRESULT hr = CoInitialize(NULL);
IGameHelperPtr pIGame(__uuidof(GameHelper));
_bstr_t ha = pIGame->GetInfo();
wprintf(_T(" %s"),ha);

Это должно работать

0 голосов
/ 07 июня 2011

Согласно Msdn , если вы вызываете SysAllocString во время передачи значения NULL, возвращается NULL.

Разве вы не передаете ссылку на NULL-указатель в ваш COM-интерфейс?И если так, ха никогда не заселится?(Я не уверен с COM, поэтому может быть не так)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...