Форум: "Начинающим";
Текущий архив: 2010.09.12;
Скачать: [xml.tar.bz2];
ВнизПомогите с передачей строкового аргумента Найти похожие ветки
← →
RET © (2010-06-17 19:35) [0]Здравствуйте, я системный программист, но кроме Си и Асма практически не знаю. Есть такая проблема:
На Си: void _stdcall LALALA(WCHAR* word)
когда Делфи вызывает эту функцию, по-идее нужно мне от нее в Си передать указатель на UNICODE-строку (в параметр "word" с заранее выделенной еще в Делфи памятью оговоренного размера) , я должен передать туда (в параметр "word") слово в юникоде, но почемуто ничего не выходит или потом приходит вместо слова какой-либой "мусор". Вопрос: как должно выглядеть объявление моей функции в Делфи?
Заранее Спасибо.
ЗЫ: смотрел в Ольке в стек - юникод строка передается, но после вызова код уходит в дебри Делфийского ООП и в итоге MessageBoxW,например выдает мусорный буфер. Решение-то простое видимо, но понять про типы данных в Делфи мне сложновато.
← →
Правильный$Вася (2010-06-17 20:02) [1]PWideChar( твоя строка )
← →
RET © (2010-06-17 20:05) [2]
> PWideChar( твоя строка )
что-то не помогает...
← →
RET © (2010-06-17 20:06) [3]тк уже пробовал
← →
Правильный$Вася (2010-06-17 20:06) [4]так и говорит "не помогаю"?
← →
Servy © (2010-06-17 20:06) [5]
procedure Test(S: PWideChar); stdcall;
begin
MessageBoxW(0, S, "Test", MB_OK);
end;
procedure CallTest;
var
S: WideString;
begin
S := "blablabla";
Test(PWideChar(S));
end;
В вашем примере случае функция Test будет реализована в, видимо, сишной dll, и объявлена вот так:
procedure Test(S: PWideChar); stdcall; external "MyDllName.dll";
← →
Anatoly Podgoretsky © (2010-06-17 20:10) [6]
> что-то не помогает...
Что то не видать твоего кода, а ведь ошибка в нем.
← →
RET © (2010-06-17 20:36) [7]
> Что то не видать твоего кода, а ведь ошибка в нем
**
конвенция вызова везде stdcall
****************************************
Это Делфи: - в нем я то и не уверен
***************************************
procedure TForm1.Timer1Timer(Sender: TObject);
var
Word: PWideChar;
begin
Word:=PWideChar(LocalAlloc(LMEM_ZEROINIT,100));//<-память выделяем
GetWord(Word); //<-эта из моей Си-шной вызывается
MessageBoxW(0,Word,0,0); //!!!!<-здесь какого-то лешего исключение если
// убрать все нормально без исключений (пробовал вместо месаджабокса
// другие юникод-API) не понимаю как делфи с указателями работает, как
// хочет что-ли?
LocalFree(Cardinal(@Word));//<-освобождаем память
end;
end.
***********************
Это простейший Си:
void __stdcall GetWord(wchar_t* Word)
{
wcscpy(Word,L"Test-String");//<-копируем юникод строку по заданному
//адресу выделенной памяти
}
← →
Плохиш © (2010-06-17 20:44) [8]
> Word: PWideChar;
>
Убил бы уже только за использование зарезервированного слова.
> MessageBoxW(0,Word,0,0); //!!!!<-здесь какого-то лешего
> исключение если
>
Что-то я не помню таких исключений "Исключение"
← →
RET © (2010-06-17 20:47) [9]0012FDD0 00000041 |Text = 00000041 ???
Вот что в ольке, отладчике в стеке вместо слова, если у меня сделать wcscpy(Word,L"A");
ADD:
> Что-то я не помню таких исключений "Исключение"
прочитайте про эксцепшены на васме у клерка и у меня
← →
RET © (2010-06-17 20:49) [10]00000041 - это ASCII код Буквы "A" передается MessageBox"у вместо адреса, почему?
← →
RET © (2010-06-17 20:53) [11]Удалено модератором
← →
RET © (2010-06-17 20:53) [12]Удалено модератором
← →
Сергей М. © (2010-06-17 21:08) [13]Удалено модератором
← →
Игорь Шевченко © (2010-06-17 21:16) [14]Удалено модератором
← →
RET © (2010-06-17 21:19) [15]Удалено модератором
← →
RET © (2010-06-17 21:19) [16]Удалено модератором
← →
RET © (2010-06-17 21:21) [17]Удалено модератором
← →
Сергей М. © (2010-06-17 21:22) [18]Удалено модератором
← →
RET © (2010-06-17 21:28) [19]Удалено модератором
← →
Сергей М. © (2010-06-17 21:30) [20]Удалено модератором
← →
RET © (2010-06-17 21:33) [21]Удалено модератором
← →
turbouser © (2010-06-17 21:36) [22]Какая прелесть :)
← →
Демо © (2010-06-17 21:41) [23]
> turbouser © (17.06.10 21:36) [22]
> Какая прелесть :)
Вот и поговорили.
← →
Jeer © (2010-06-17 22:40) [24]Ого !
← →
Плохиш © (2010-06-17 22:51) [25]Хорошая охота...
← →
Anatoly Podgoretsky © (2010-06-17 23:46) [26]Да какая охота, это больше на отстрел похоже.
← →
Германн © (2010-06-18 01:43) [27]
> turbouser © (17.06.10 21:36) [22]
>
> Какая прелесть :)
>
А я прозевал. Весь день был в отлучке от компа :(
Может кто скинет на почту в анкете?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.09.12;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.006 c