Pergunta

Sumário:

Ao tentar usar triagem para passar dados de cadeia em um ++ DLL C de C #, estou ficando

'msclr :: interoperabilidade :: error_reporting_helper <_To_Type, _From_Type> :: marshal_as': Esta conversão não é suportada pela a biblioteca ou o arquivo de cabeçalho necessária para esta conversão não é incluído. Consulte a documentação sobre 'Como: Estender o empacotamento Biblioteca' para adicionar seu próprio método de empacotamento. C: \ Program Microsoft Visual Studio arquivos \ 9.0 \ vc \ include \ msclr \ marshal.h 203

Estou usando o Visual Studio 2008 Professional Edition; Visual C ++ 2008; Net 3.5.

Detalhe:

O método em questão (na sua forma mais simples) é como se segue:

LibDSSDLL::DssOutputSocketFacade::DssOutputSocketFacade(const System::String^ name)
{
    marshal_context^ context = gcnew marshal_context();
    std::string n = context->marshal_as<std::string>(name);

    this->socket = new DssOutputSocket( n);
}

O cabeçalho inclui na ordem em que são apresentados para o pré-processador são

#include "StdAfx.h"
#include <string>
#include <iostream>
#include <msclr\marshal_cppstd.h>

#using <mscorlib.dll>
using namespace System;
using namespace msclr::interop;

Este parece-me como se ele está de acordo com o exemplo citado aqui e a documentação no MSDN (Stack Overflow se recusa a deixar-me citar uma segunda URL); no entanto claramente o compilador C ++ não é encontrar a conversão ele precisa.

O que eu perdi? Confesso que não sou muito perito com C ++ ou com o Windows.

Foi útil?

Solução

A documentação não diz que leva um const String ^. Remova a const.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top