PRTL_USER_PROCESS_PARAMETERS ни у кого нету описание вот этой структуры? скачал студию 2008 и DDK расковырял вроде все файлы проверил не нашел. на мсдн есть только для windows desktop c ней код не компилится пишет ошибка, с w2kundoc.inc код компилится но не работает, не могу ошибку найти. нашел на одном форуме упоминание о запусках процессов в нативных режимах что есть отличие между w2k и wxp, без уточнения в какой структуре конкретно
» Вопросы по программированию на C/С++
kvazigorynich
Цитата:
Скрипту Configure, который входит в проект. Он запускается под MSYS и генерит makefile. Стандартная операция для линуксовых проектов.
Цитата:
И все-таки под виндой кому можно скормить makefile.in для сборки проекта?
Скрипту Configure, который входит в проект. Он запускается под MSYS и генерит makefile. Стандартная операция для линуксовых проектов.
объясните пожалуйста вот в этом куске кода при вызове функции RtlCreateProcessParameters ей передается указатель на структуру Env или сама структура запихивается в стек?
Цитата:
Добавлено:
Цитата:
и еще такой вопрос вот тут надо как до дополнительно инициализировать память?
у меня вот так написано в инклуде. и мне нужен параметр +30h. но при обращении к этой памяти процесс вылетает
Цитата:
Цитата:
NTSTATUS CreateNativeProcess(IN PCWSTR file_name, IN PCWSTR cmd_line, OUT PHANDLE hProcess)
{
UNICODE_STRING fname, nt_file;
PCWSTR file_part;
UNICODE_STRING EnvString, NullString, UnicodeSystemDriveString;
NTSTATUS status; // Status
UNICODE_STRING imgname; // ImageName
UNICODE_STRING imgpath; // Nt ImagePath
UNICODE_STRING dllpath; // Nt DllPath (DOS Name)
UNICODE_STRING cmdline; // Nt CommandLine
PRTL_USER_PROCESS_PARAMETERS processparameters; // ProcessParameters
RTL_USER_PROCESS_INFORMATION processinformation={0}; // ProcessInformation
WCHAR Env[2] = { 0,0 }; // Process Envirnoment
PKUSER_SHARED_DATA SharedData = (PKUSER_SHARED_DATA)USER_SHARED_DATA; // Kernel Shared Data
*hProcess = NULL;
RtlDosPathNameToNtPathName_U(file_name, &nt_file, &file_part, NULL);
RtlInitUnicodeString(&imgpath, nt_file.Buffer); // Image path
RtlInitUnicodeString(&imgname, file_part); // Image name
RtlInitUnicodeString(&dllpath, SharedData->NtSystemRoot); // DLL Path is %SystemRoot%
RtlInitUnicodeString(&cmdline, cmd_line); // Command Line parameters
status = RtlCreateProcessParameters(&processparameters, &imgname, &dllpath, &dllpath, &cmdline, Env, 0, 0, 0, 0);
if (!NT_SUCCESS(status))
{
RtlCliDisplayString("RtlCreateProcessParameters failed\n");
return STATUS_UNSUCCESSFUL;
Добавлено:
Цитата:
PKUSER_SHARED_DATA SharedData = (PKUSER_SHARED_DATA)USER_SHARED_DATA
и еще такой вопрос вот тут надо как до дополнительно инициализировать память?
у меня вот так написано в инклуде. и мне нужен параметр +30h. но при обращении к этой памяти процесс вылетает
Цитата:
KI_USER_SHARED_DATA equ 0ffdf0000h;0xFFDF0000
SharedUserData equ KI_USER_SHARED_DATA
Abs62
Наконец-то понял в чем там суть. Кто-нибудь в курсе где взять ликукор?
В смысле
Код: cannot find -licucore
Наконец-то понял в чем там суть. Кто-нибудь в курсе где взять ликукор?
В смысле
Код: cannot find -licucore
bomzzz
Цитата:
Это обычный массив WCHAR. Ну и как в любом массиве, имя массива одновременно является и указателем на этот массив.
Цитата:
при вызове функции RtlCreateProcessParameters ей передается указатель на структуру Env или сама структура запихивается в стек?С чего ты решил, что Env - структура?
Это обычный массив WCHAR. Ну и как в любом массиве, имя массива одновременно является и указателем на этот массив.
ну потому что это переменная окружения, а по коду у меня сложилось впечатление, что если перед именем стоит & то это указатель, если конечно имя сразу как поинтер не задекларировано. но вот в этом случае я не могу разобраться, потому что вроде по описанию должен указатель передаваться, а по коду чета понять не могу тут указатель или она сама засовываетсся и как назло у нее размерность четыре байта. в итоге я программу дезассемблировал и увидел что там поинтер
недокументированные все функции в разных местах могут быть по разному описаны, приходится методом тыка пробираться
Добавлено:
[more]static
NTSTATUS
__fastcall
_ExecuteImage(
IN PUNICODE_STRING ImageFileName,
IN PUNICODE_STRING CommandLine OPTIONAL,
IN PUNICODE_STRING Curdir OPTIONAL,
IN PUNICODE_STRING Environment OPTIONAL,
OUT NTSTATUS* ExitCode OPTIONAL
)
{
NTSTATUS Status;
PRTL_USER_PROCESS_PARAMETERS pp;
RTL_PROCESS_INFO pi;
//
// Create process.
//
Status = RtlCreateProcessParameters(&pp,
ImageFileName,
NULL,
Curdir,
CommandLine,
Environment,
NULL,
NULL,
NULL,
NULL
);
if(STATUS_SUCCESS != Status)
{
return Status;
}
//
// Call Rtl to create the process.
//
Status = RtlCreateUserProcess(
ImageFileName,
OBJ_CASE_INSENSITIVE,
pp,
NULL,
NULL,
NULL,
TRUE,
NULL,
NULL,
&pi
);
RtlDestroyProcessParameters(pp);[/more]
а вот тут скажите пожалуйста что значит - в одной функции стоит &pp в другой просто pp, это что ли указатель на указатель получается?
недокументированные все функции в разных местах могут быть по разному описаны, приходится методом тыка пробираться
Добавлено:
[more]static
NTSTATUS
__fastcall
_ExecuteImage(
IN PUNICODE_STRING ImageFileName,
IN PUNICODE_STRING CommandLine OPTIONAL,
IN PUNICODE_STRING Curdir OPTIONAL,
IN PUNICODE_STRING Environment OPTIONAL,
OUT NTSTATUS* ExitCode OPTIONAL
)
{
NTSTATUS Status;
PRTL_USER_PROCESS_PARAMETERS pp;
RTL_PROCESS_INFO pi;
//
// Create process.
//
Status = RtlCreateProcessParameters(&pp,
ImageFileName,
NULL,
Curdir,
CommandLine,
Environment,
NULL,
NULL,
NULL,
NULL
);
if(STATUS_SUCCESS != Status)
{
return Status;
}
//
// Call Rtl to create the process.
//
Status = RtlCreateUserProcess(
ImageFileName,
OBJ_CASE_INSENSITIVE,
pp,
NULL,
NULL,
NULL,
TRUE,
NULL,
NULL,
&pi
);
RtlDestroyProcessParameters(pp);[/more]
а вот тут скажите пожалуйста что значит - в одной функции стоит &pp в другой просто pp, это что ли указатель на указатель получается?
Собрал чтоб её!
Правда есть несколько странностей. Может у кого мысли будут по этому поводу?
1. Сборка требует dll'ки. С теми либами которые я собирал у себя сборка не проходила, я взял на авось отсюда https://raw.github.com/dwimperl/perl-5.12.3.0/master/c/lib/libxml2.a. Все собралось, но либы видать не статические?
2. Почему-то требует dll'ки с подчеркиванием на конце и без. Dll'ку подсунул одну и туже. Работает, но нафига ей две одинаковые с разными именами? Я это конечно пофиксил. Просто в exe убрал подчеркивание из имени dll и в конце нолик добавил. Но все-таки хотелось бы понять причину.
Прога при использовании показала идентичный результат с оригиналом. Значит как я понимаю сборка прошла удачно, но с непонятными косяками по вышеозначенным двум пунктам.
Если кто-то что-то может подсказать, буду рад выслушать.
Правда есть несколько странностей. Может у кого мысли будут по этому поводу?
1. Сборка требует dll'ки. С теми либами которые я собирал у себя сборка не проходила, я взял на авось отсюда https://raw.github.com/dwimperl/perl-5.12.3.0/master/c/lib/libxml2.a. Все собралось, но либы видать не статические?
2. Почему-то требует dll'ки с подчеркиванием на конце и без. Dll'ку подсунул одну и туже. Работает, но нафига ей две одинаковые с разными именами? Я это конечно пофиксил. Просто в exe убрал подчеркивание из имени dll и в конце нолик добавил. Но все-таки хотелось бы понять причину.
Прога при использовании показала идентичный результат с оригиналом. Значит как я понимаю сборка прошла удачно, но с непонятными косяками по вышеозначенным двум пунктам.
Если кто-то что-то может подсказать, буду рад выслушать.
возможно они должны быть разными. но для твоей программы оказалось не критично вот для масма 10-го надо две такие
bomzzz
Цитата:
Похоже на то. Где-то внутри функции создается структура, а возвращается только указатель на нее. &pp указывает, куда положить этот указатель
Цитата:
а вот тут скажите пожалуйста что значит - в одной функции стоит &pp в другой просто pp, это что ли указатель на указатель получается?
Похоже на то. Где-то внутри функции создается структура, а возвращается только указатель на нее. &pp указывает, куда положить этот указатель
>bomzzz
В функцию RtlCreateProcessParameters(&pp,...) передаётся адрес указателя pp.
RtlCreateProcessParameters() делает malloc(), заполняет структуру и записывает адрес начала структуры в адрес pp. (*pp = RtlUserProcessParameters;)
Дальше в коде исползуется указатель, который указывает на структуру RTL_USER_PROCESS_PARAMETERS
и в самом конце RtlDestroyProcessParameters() освобождает (free()) память занимаемую структурой.
В функцию RtlCreateProcessParameters(&pp,...) передаётся адрес указателя pp.
RtlCreateProcessParameters() делает malloc(), заполняет структуру и записывает адрес начала структуры в адрес pp. (*pp = RtlUserProcessParameters;)
Дальше в коде исползуется указатель, который указывает на структуру RTL_USER_PROCESS_PARAMETERS
и в самом конце RtlDestroyProcessParameters() освобождает (free()) память занимаемую структурой.
Думаю что в моем случае дела обстоят иначе.
Слева оригинал, требующий dll и с подчеркиванием и без. Справа тот что я поправил. Ему хватает просто dll без подчеркиваний.
И кстати у левого, судя по показаниям плагина, нет зависимостей от dll без подчеркивания.
UPD: Вопрос с подчеркиваниями решился. Просто заменил либы на свои откомпилированные.
Вопрос со статической сборкой никак решить не получается. Как только я подсовываю статическую библиотеку, линкер сразу начинает ругаться на то что функции в libxslt не определены. Самое интересное что эти функции должны быть в libxml2, но в статической libxml2 такое ощущение что их нет.
Слева оригинал, требующий dll и с подчеркиванием и без. Справа тот что я поправил. Ему хватает просто dll без подчеркиваний.
И кстати у левого, судя по показаниям плагина, нет зависимостей от dll без подчеркивания.
UPD: Вопрос с подчеркиваниями решился. Просто заменил либы на свои откомпилированные.
Вопрос со статической сборкой никак решить не получается. Как только я подсовываю статическую библиотеку, линкер сразу начинает ругаться на то что функции в libxslt не определены. Самое интересное что эти функции должны быть в libxml2, но в статической libxml2 такое ощущение что их нет.
ne_viens
пасиба, просветление началось.
Добавлено:
ne_viens
ура бсода нет. еще какая то кривость но заработало.
http://undocumented.ntinternals.net/UserMode/Structures/RTL_USER_PROCESS_PARAMETERS.html
Should be set before call RtlCreateProcessParameters.
никогда бы не подумал что тут это имелось ввиду
Добавлено:
я с этим сутки ковырялся. в принципе мог дорыться. я уже пробовал создаваемую структуру разбирать и не мог понять куда оно подевалось.
и с этим проковырялся часов шесть. у меня число от 2000-ка оказывается было
invoke MessageBoxW,0,[7FFE0000h+48],ADDR mestitle,MB_ICONASTERISK
пасиба, просветление началось.
Добавлено:
ne_viens
ура бсода нет. еще какая то кривость но заработало.
http://undocumented.ntinternals.net/UserMode/Structures/RTL_USER_PROCESS_PARAMETERS.html
Should be set before call RtlCreateProcessParameters.
никогда бы не подумал что тут это имелось ввиду
Добавлено:
я с этим сутки ковырялся. в принципе мог дорыться. я уже пробовал создаваемую структуру разбирать и не мог понять куда оно подевалось.
и с этим проковырялся часов шесть. у меня число от 2000-ка оказывается было
invoke MessageBoxW,0,[7FFE0000h+48],ADDR mestitle,MB_ICONASTERISK
никто такой фигней не пользовался LdrEnumerateLoadedModules
все что нашел http://www.wasm.ru/forum/viewtopic.php?pid=221396
Цитата:
я уж по всякому перепробовал один раз вызывает функция обратного вызова с именем самой программы, а потом выдает ошибку c00000ef - STATUS_INVALID_PARAMETER_1
почему ни LdrGetDllHandle ни GetModuleHandle не возвращают handle ntoskrnl.exe?
пытаюсь из нее получить адрес функции
invoke LdrGetProcedureAddress, hntoskrnl, $CTA0("InbvResetDisplay"), 302, addr addrInbvResetDisplay;
и по имени и по ординалу фигу. а из user32.dll выдает.
A user-mode application cannot call the entry points in Ntoskrnl.exe, and a kernel-mode driver cannot call the entry points in Ntdll.dll.
Добавлено:
ne_viens
получится так - к командному интерпретатору сделать драйвер, который будет загружаться с помощью NtLoadDriver и вызывать функции ядра недоступные пользовательскому режиму?
все что нашел http://www.wasm.ru/forum/viewtopic.php?pid=221396
Цитата:
invoke LdrEnumerateLoadedModules, 0, addr MyProc, addr stop
MyProc proc DataTableEntry:DWORD,Parameter:DWORD,StopEnumerate:DWORD
assume ebx:ptr LDR_DATA_TABLE_ENTRY
mov ebx, DataTableEntry
invoke MessageBoxW,0,[ebx].BaseDllName.Buffer,ADDR mestitle,MB_ICONASTERISK
assume ebx:NOTHING
mov byte ptr[StopEnumerate], 1
mov Parameter, 1
xor eax, eax
ret
MyProc endp
я уж по всякому перепробовал один раз вызывает функция обратного вызова с именем самой программы, а потом выдает ошибку c00000ef - STATUS_INVALID_PARAMETER_1
почему ни LdrGetDllHandle ни GetModuleHandle не возвращают handle ntoskrnl.exe?
пытаюсь из нее получить адрес функции
invoke LdrGetProcedureAddress, hntoskrnl, $CTA0("InbvResetDisplay"), 302, addr addrInbvResetDisplay;
и по имени и по ординалу фигу. а из user32.dll выдает.
A user-mode application cannot call the entry points in Ntoskrnl.exe, and a kernel-mode driver cannot call the entry points in Ntdll.dll.
Добавлено:
ne_viens
получится так - к командному интерпретатору сделать драйвер, который будет загружаться с помощью NtLoadDriver и вызывать функции ядра недоступные пользовательскому режиму?
Я еще попробую поспрашивать про статическую сборку.
Я вроде понимаю в чем проблема, но никак не могу понять почему происходит так.
В статической и динамической версии библиотек функции имеют разные имена. Почему-то в объектных файлах используются функции с именами из динамической библиотеки. А нужно чтобы использовались те что в статической находятся.
Например линкер пишет
Код:
/MinGW/lib\libexslt.a(common.o): In function `exsltNodeSetFunction':
\MinGW\msys\1.0\home\3K\libxslt\libexslt/common.c:71: undefined reference to `_imp__xmlFree'
Я вроде понимаю в чем проблема, но никак не могу понять почему происходит так.
В статической и динамической версии библиотек функции имеют разные имена. Почему-то в объектных файлах используются функции с именами из динамической библиотеки. А нужно чтобы использовались те что в статической находятся.
Например линкер пишет
Код:
/MinGW/lib\libexslt.a(common.o): In function `exsltNodeSetFunction':
\MinGW\msys\1.0\home\3K\libxslt\libexslt/common.c:71: undefined reference to `_imp__xmlFree'
Цитата:
ne_viens
получится так - к командному интерпретатору сделать драйвер, который будет загружаться с помощью NtLoadDriver и вызывать функции ядра недоступные пользовательскому режиму?
получится. проверил
ne_viens
Можешь прокомментировать пример на русском языке? Желательно по строкам. Сначала я почитал основные разделы в справке, чтобы разобраться, но сам алгоритм понять всё равно сложно.
Можешь прокомментировать пример на русском языке? Желательно по строкам. Сначала я почитал основные разделы в справке, чтобы разобраться, но сам алгоритм понять всё равно сложно.
kvazigorynich
Ключ скрипта конфигурации "--disable-shared" пробовали?
Ключ скрипта конфигурации "--disable-shared" пробовали?
Abs62
делал так
./configure --enable-static --disable-shared
Этот ключ везде надо использовать? Я имею ввиду при сборке всех библиотек и приложения?
делал так
./configure --enable-static --disable-shared
Этот ключ везде надо использовать? Я имею ввиду при сборке всех библиотек и приложения?
kvazigorynich
Цитата:
Если стоит задача по максимуму обойтись без динамических библиотек - по идее, да.
Цитата:
Этот ключ везде надо использовать? Я имею ввиду при сборке всех библиотек и приложения?
Если стоит задача по максимуму обойтись без динамических библиотек - по идее, да.
Abs62
Пересобрал все с ключом --disable-shared. Вроде нормально теперь.
Осталось только freetype победить. В исходниках configure сделан через одно место. Он утверждает что у меня unix и пытается соответствующую сборку сделать.
Вобщем все собрал как хотел. Траблы были из-за того что путаница в директориях присутствовала и надо было использовать --disable-shared. Хотя это и не должно было влиять. Потому что по умолчанию генерятся обе библиотеки. Правда есть подозрение что дело скорее в директории include. Видимо она отличается при сборке с shared и без.
Пересобрал все с ключом --disable-shared. Вроде нормально теперь.
Осталось только freetype победить. В исходниках configure сделан через одно место. Он утверждает что у меня unix и пытается соответствующую сборку сделать.
Вобщем все собрал как хотел. Траблы были из-за того что путаница в директориях присутствовала и надо было использовать --disable-shared. Хотя это и не должно было влиять. Потому что по умолчанию генерятся обе библиотеки. Правда есть подозрение что дело скорее в директории include. Видимо она отличается при сборке с shared и без.
>AZJIO
Прокомментировал.
Прокомментировал.
ne_viens
сделал драйвер, его загружает нативная консоль и через него доступны все функции ядра - очистка экрана, управление курсором, цвет экрана и куча всего остального.
а нельзя интересно как то придумать, чтоб выделить память в контексте процесса которому доступны все функции ядра и обойтись без драйвера?
сделал драйвер, его загружает нативная консоль и через него доступны все функции ядра - очистка экрана, управление курсором, цвет экрана и куча всего остального.
а нельзя интересно как то придумать, чтоб выделить память в контексте процесса которому доступны все функции ядра и обойтись без драйвера?
В native программировании от меня плохой советник будет, так как забросил я это дело с приходом win64. Если нельзя запустить неподписанный драйвер, то нафик его и писать.
Последним был драйвер, который включает аналоговые входы на DV камере как dvin.exe (http://www.sps.volyne.cz/set1394/anin/analog.html) но из WinXP. Понадобилось старые VHSы перегнать на цифру.
Кстати, из-за win64 я из MASMа на C перешёл тоже.
А в native очень мало что доступно из того, что имеется в user modе. Даже GetModuleHandle() надо писать самому. И количество доступных API уменьшается с увеличением IRQL. И большинство native API вообще не документировано- надо самому искать информацию по белу свету, или выкапывать из Debug Symbols, или дизасемблировать Идой.
Последним был драйвер, который включает аналоговые входы на DV камере как dvin.exe (http://www.sps.volyne.cz/set1394/anin/analog.html) но из WinXP. Понадобилось старые VHSы перегнать на цифру.
Кстати, из-за win64 я из MASMа на C перешёл тоже.
А в native очень мало что доступно из того, что имеется в user modе. Даже GetModuleHandle() надо писать самому. И количество доступных API уменьшается с увеличением IRQL. И большинство native API вообще не документировано- надо самому искать информацию по белу свету, или выкапывать из Debug Symbols, или дизасемблировать Идой.
Цитата:
надо самому искать информацию по белу свету,
ну так интерестнее.
Цитата:
Даже GetModuleHandle() надо писать самому.
LdrGetDllHandle не надо
ярад конечно за микрософт что они так далеко продвинулись, но я еще так далеко не продвинулся
Вот такой вопрос возник.
Имеется ли возможность конвертануть проект, который я наконец-то заставил работать под MSYS например в проект для Visual Studio. Насколько я знаю CMAKE умеет такое, но там ведь нужен конфигурационный файл. Этот файл автоматически можно сгенерировать? Или проще добавить все файлы проекта в Visual Studio, все включаемые файлы перенести в директории include или в сам проект, собрать библиотеки под Visual Studio и подключить к проекту? Мне просто удобнее в Visual Studio работать. В блокноте не очень удобно исходники править . Боюсь только что этот процесс опять начнет трепать мне нервы и займет день или два. Кто-нибудь пробовал вручную переносить?
Имеется ли возможность конвертануть проект, который я наконец-то заставил работать под MSYS например в проект для Visual Studio. Насколько я знаю CMAKE умеет такое, но там ведь нужен конфигурационный файл. Этот файл автоматически можно сгенерировать? Или проще добавить все файлы проекта в Visual Studio, все включаемые файлы перенести в директории include или в сам проект, собрать библиотеки под Visual Studio и подключить к проекту? Мне просто удобнее в Visual Studio работать. В блокноте не очень удобно исходники править . Боюсь только что этот процесс опять начнет трепать мне нервы и займет день или два. Кто-нибудь пробовал вручную переносить?
а я наоборот только в блокноте могу писать. никакой гуй мне не по глазам
Ребята, я погляжу вы тут шарите в dll-ках и прочей ереси Может подскажите мне чего полезного. Вобщем есть прога, к которой подключаются модули в виде dll файлов. И прога и dll-ки написаны на builder 6. Давненько мне нужно было подшаманить dll, изменить существующие функции, добавить нового функционала. А стояла у меня тогда ВинХП и CodeGear C++ Builder 2009 или 2010. И ставить шестой билдер нехотелось. Попробовал загнать исходники dll в Builder 2009 - с небольшими доработками всё скомпилилось. Но подсунув эту dll-ку проге - та благополучно валилась. Видимо что-то в dll отличалось, описания функций, типы передаваемых/возвращаемых параметров, или ещё чего. Копнув немного в инете - ничего дельного не нашел. Незнал как точно сформулировать запрос. Вобщем пришлось тогда тупо ставить builder 6 и компилить всё в нем.
Щас у меня компик обновился, стоит Win7 и RadStudio C++ Builder XE2. И снова понадобилась доработка тех dll-ок. Ставить динозавра Builder 6 я чего-то нехочу. Может в XE2 в свойствах проекта где-нибудь чего-нибудь потыкать можно, чтоб "интерфейс" dll-ки скомпиленой в XE2 стал похож на Builder 6. Вобщем получилось вроде так: нужно чтоб dll-ка написаная на XE2 работала с приложением написаным на Builder 6.
Щас у меня компик обновился, стоит Win7 и RadStudio C++ Builder XE2. И снова понадобилась доработка тех dll-ок. Ставить динозавра Builder 6 я чего-то нехочу. Может в XE2 в свойствах проекта где-нибудь чего-нибудь потыкать можно, чтоб "интерфейс" dll-ки скомпиленой в XE2 стал похож на Builder 6. Вобщем получилось вроде так: нужно чтоб dll-ка написаная на XE2 работала с приложением написаным на Builder 6.
перекомпилировать или сразу программы писать совместимо, каждую функцию проверяя по мсдну. чтоб была совместима до Windows NT. даже драйвера можно совместимо написать.
что можно сделать = нативная консоль как я понял - это пользовательский режим, хотя работают и Zw и Nt функции одинаково прекрасно. чтоб использовать функции NtOsKrnl пришлось сделать драйвер. как можно одним файлом обойтись?
что можно сделать = нативная консоль как я понял - это пользовательский режим, хотя работают и Zw и Nt функции одинаково прекрасно. чтоб использовать функции NtOsKrnl пришлось сделать драйвер. как можно одним файлом обойтись?
kvazigorynich
А что ж мешало сразу в студии собирать?
По существу, к сожалению, не знаю ответа. Но если сишный код, то скорее всего без правки текста не обойтись - студия не поддерживает стандарт C99
А что ж мешало сразу в студии собирать?
По существу, к сожалению, не знаю ответа. Но если сишный код, то скорее всего без правки текста не обойтись - студия не поддерживает стандарт C99
suslovp,
Цитата:
1. Обращение к функциям должно быть одинаковым
2. Должно быть строгое согласование переменных и их типов.
Цитата:
нужно чтоб dll-ка написаная на XE2 работала с приложением написаным на Builder 6.Это - возможно, но:
1. Обращение к функциям должно быть одинаковым
2. Должно быть строгое согласование переменных и их типов.
Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
Предыдущая тема: не знаю как назвать тему :-)
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.