Re[2]: проблема взаимодействия С++ и Managed C++
От: Grimlock  
Дата: 28.12.05 09:23
Оценка:
Здравствуйте, Аноним, Вы писали:


G>>так вот авопрос почему не работает передача данных .... даже по ссылке? ... а по ссылке работает (хотя по опредеению ссылка это консантный указатель((


А>Это не "проблема взаимодействия С++ и Managed C++", а "проблема незнания основ C++": в первых двух случаях вы пытаетесь использовать данные временных обектов std::string, которые к моменту их использования уже разрушены. В третьем случае — обект не временный, зато есть утечка памяти.


перепиал код

using namespace System;

typedef char * (* TestStringFromStdString) (std::string);

typedef char * (* TestStringFromStdStringRef) (std::string &);

typedef char * (* TestStringFromStdStringPtr) (std::string *);

int main(array<System::String ^> ^args)
{
HMODULE module = LoadLibrary(L"ppc.dll");

char * inputValue0 = "halloWorld";

TestStringFromStdString t0 = (TestStringFromStdString) GetProcAddress(module, "TestStringFromStdString");

TestStringFromStdStringRef t1 = (TestStringFromStdStringRef) GetProcAddress(module, "TestStringFromStdStringRef");

TestStringFromStdStringPtr t2 = (TestStringFromStdStringPtr) GetProcAddress(module, "TestStringFromStdStringPtr");

std::string s(inputValue0);

char * outputValue0 = t0( s );

char * outputValue1 = t1( s );

char * outputValue2 = t2( &s );

Console::WriteLine(gcnew String(outputValue0));

Console::WriteLine(gcnew String(outputValue1));

Console::WriteLine(gcnew String(outputValue2));

FreeLibrary(module);

return 0;
}

2 и 3 варианты работают .... почему не работает первый???
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.