· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.RESEARCH —› ForwarderChain

<< . 1 . 2 . 3 . >>

Посл.отвђт Сообщенiе


Дата: Июл 27, 2003 03:44:46

Манглингом мы обязаны Страуструпу, который переложил дикую часть нагрузки на компилятор. Хотя, подозреваю, ты просто шутишь. Ну не можешь ты не знать таких вещей :)


Дата: Июл 27, 2003 06:18:56

Ээээ... Я имел в виду несовместимость между обычным для STDCALL "_" + "@N" и вижуальным мусором вроде ?garbage@@YGHPAUHWND__@@PBD1I@Z.
А про Страуструпа я действительно не знал... Пора признаваться что я тоже не программер по профессии ;)


Дата: Июл 27, 2003 17:42:20

Это не мусор. Как отличать виртуальные функции, как отличать перегрузку и т.д., и т.п.?
Что до не программера, ха, забавно :) Значит, тезка, мы товарищи :)


Дата: Июл 27, 2003 18:48:57

Это не мусор.
Разве!? Моя функция "garbage()" была объявлена так:
int __stdcall garbage(
   HWND hWnd,
   LPCSTR lpText,
   LPCSTR lpCaption,
   UINT uType);
Обзывая это дело ?garbage@@YGHPAUHWND__@@PBD1I@Z, вижуал просто умничает.

Значит, тезка, мы товарищи :)
Эт точно!


Дата: Июл 28, 2003 13:24:29

> Обзывая это дело ?garbage@@YGHPAUHWND__@@PBD1I@Z, вижуал просто умничает

Нет, не умничает - просто фалик был наверняка с расширением .cpp вот все имена и исказились =)
Сделай файлу .c расширение или опиши функцию как extern "C" int __stdcall garbage(...) и получишь стандартное искажение - будет _garbage@16


Дата: Июл 28, 2003 18:43:35

Dr.Golova
Преклоняюсь перед истинным гением!
ЗЫ: Я раньше пробовал просто extern "C" int garbage() и получал _garbage, а дописать __stdcall ума не хватило :)


Дата: Июл 30, 2003 10:33:31 · Поправил: masquer

Я когда привязываю stdcall masm-a к проекту на VC в хедере так пишу:
extern "C" bool __stdcall Foo(char *, OutPutStruc *);
на асме так
.model flat, stdcall
...
Foo proc p1, p2
ret
Foo endp

Вот эта "C" и делает деманглинг - в МСДН про это написано.


Дата: Июл 30, 2003 17:36:01

Пробовали... Пробовали... Ни фига не получилось!


Дата: Июл 30, 2003 18:40:01

Не может быть! У меня всё работает после добавления __stdcall. Пробовал с тем форвардом с Hi на MessageBoxA. Может сорсы выслать?


Дата: Июл 30, 2003 19:22:18

Высылаю...

2120323833__Forward.zip


Дата: Июл 30, 2003 20:53:10

У меня задымилась крыша! Вот ты пишешь:
#include "stdafx.h"

extern "C" int __stdcall Hi(int, char*, char*, int);

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow){
	Hi(0,"Lya-Lya-Lya", "Test", 0);
	return 0;
}



А в def-файле у тебя:
EXPORTS Hi = User32.MessageBoxA @2 NONAME


Ну и кто сошел с ума?


Дата: Июл 30, 2003 21:15:40

Ты имеешь в виду NONAME? Так я ж уже писал что символ Hi удаляется из DLL, но не из LIB.

ЗЫ: Tandem felix!


Дата: Июл 30, 2003 21:27:42 · Поправил: volodya

Да мать за ногу, что ж такое. Не могу скомпилировать. Твой проект могу, этот нет. Код один-в-один. И валится!
extern "C" int __stdcall Hi(int, char*, char*, int);  //error C2059: syntax error : 'string'


Ну, если честно, то не совсем один-в-один. Вместо стандартного заголовка я положил
#define WIN32_LEAN_AND_MEAN
#include <windows.h>


и создал пустой проект.


Дата: Июл 30, 2003 21:41:55 · Поправил: volodya

Меня сейчас колотить начнет. Или я комп колотить начну.
Файл:
#include "stdafx.h"

extern "C" int __stdcall Hi(int, char*, char*, int);

int _tmain(int argc, _TCHAR* argv[])
{
	return 0;
}


В stdafx.h:
#pragma once

#define WIN32_LEAN_AND_MEAN		// Exclude rarely-used stuff from Windows headers
#include <stdio.h>
#include <tchar.h>


Мой файл:
#pragma once
#define WIN32_LEAN_AND_MEAN		// Exclude rarely-used stuff from Windows headers
#include <stdio.h>


extern "C" int __stdcall Hi(int, char*, char*, int);  //не пропускает!

int main(void)
{
	Hi(0,"Lya-Lya-Lya", "Test", 0);
	return 0;
}



Мне плохо :((((

И даже командная строка одинакова! Что я уж только не делал...


Дата: Июл 30, 2003 21:47:46 · Поправил: volodya

П%№;"дец!!! Я не понимаю, как ты его собрал. Когда сольешь 2003 - попробуй собрать под ней. Я не могу.

Причем ТВОЙ проект собирается с песней и на ура. Слушай, ты бы не мог переписать с масма на С? Я хочу все попробовать на чистом С. А то у меня даже инклудов нет :(

Да, и что бы было, если убрать NONAME? Я НИ Х....... НЕ ПОНИМАЮ!!!!

<< . 1 . 2 . 3 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.038