ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

18.11.2008, 20:05
|
|
Участник форума
Регистрация: 08.10.2007
Сообщений: 259
Провел на форуме: 500748
Репутация:
137
|
|
groupby, благодарю всё теперь Ок
|
|
|

19.11.2008, 01:54
|
|
Постоянный
Регистрация: 04.12.2007
Сообщений: 424
Провел на форуме: 2364957
Репутация:
479
|
|
Как ни пытался сделать процесс с параметрами - ничего не выходит. Окончательный вариант
STARTUPINFO si;
PROCESS_INFORMATION pi;
GetStartupInfo(&si);
CreateProcess(L"test.exe", L"-x", 0, 0, 0, NORMAL_PRIORITY_CLASS, 0, 0, &si, &pi);
ExitProcess(0);
|
|
|

19.11.2008, 02:04
|
|
Познающий
Регистрация: 22.07.2008
Сообщений: 62
Провел на форуме: 304390
Репутация:
172
|
|
Полный путь до процесса? до твоего test.exe
Добавлено: если, что его не сюда постить надо было, а вставить в код и попробывать скомпилить.
Код:
STARTUPINFO si;
PROCESS_INFORMATION pi;
GetStartupInfo(&si);
CreateProcess(L"C:\\Program Files\\TEST\\test.exe", L"-x", 0, 0, 0, NORMAL_PRIORITY_CLASS, 0, 0, &si, &pi);
ExitProcess(0);
Последний раз редактировалось _Kris_; 19.11.2008 в 02:32..
|
|
|

19.11.2008, 02:15
|
|
Постоянный
Регистрация: 04.12.2007
Сообщений: 424
Провел на форуме: 2364957
Репутация:
479
|
|
Я так уже пробовал, не получилось.
проблему решил.
CreateProcess(L"test.exe", L"test.exe -x", 0, 0, 0, NORMAL_PRIORITY_CLASS, 0, 0, &si, &pi);
Последний раз редактировалось ntldr; 19.11.2008 в 14:52..
|
|
|

19.11.2008, 15:41
|
|
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
Провел на форуме: 811764
Репутация:
119
|
|
А зачем второй раз test.exe указываешь? Вторым параметром передается аргумент процесса. Если в первом стоит NULL, то во втором надо указывать "имя_модуля аргумент"...
|
|
|

19.11.2008, 16:26
|
|
Постоянный
Регистрация: 04.12.2007
Сообщений: 424
Провел на форуме: 2364957
Репутация:
479
|
|
Сообщение от criz
А зачем второй раз test.exe указываешь? Вторым параметром передается аргумент процесса. Если в первом стоит NULL, то во втором надо указывать "имя_модуля аргумент"...
я знаю, но таким способом у меня почему-то не запускалось вообще
|
|
|

19.11.2008, 20:21
|
|
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
Провел на форуме: 811764
Репутация:
119
|
|
Сообщение от ntldr
я знаю, но таким способом у меня почему-то не запускалось вообще
Попробуй вызвать GetLastError(), может узнаешь в чем проблема.
|
|
|

19.11.2008, 22:08
|
|
студент
Регистрация: 30.07.2007
Сообщений: 800
Провел на форуме: 4275992
Репутация:
1188
|
|
передача массива в DLL
постановка задачи: нужно было с функции передать в DLL библиотеку значения А, В, С, и т.д. и одномерный массив для вычисления функции, библиотека возвращает результат операции или же код ошибки (тоже результат 666).
реализация:
глобальные переменные
Код:
int mas[5];
int el, g;
int m_a[5], m_b[5],m_c[5],m_matrix[80];
int Number;
int am,bm,cm;
Функция RUN
Код:
void CMyFrameWin::OnRun()
{
char sq[80];
FILE *read;
read=fopen("matrix.txt","r");
while(!feof(read)){
for(int g=0;g<5;g++)
{
fscanf(read,"%d",&el);
mas[g]=el;
fscanf(read,"\n");
sprintf(sq,"%d", mas[g]);
MessageBox(sq,"ELEMENT MASIVA"); // проверка елементов
}
}
int res;
HINSTANCE hDll;
char s[100];
hDll=::LoadLibrary("MyDll");
if (hDll == NULL)
{
::MessageBox(NULL,"ERROR","ERROR! File MyDll.dll not found!",MB_OK| MB_ICONSTOP);
}
else
{
typedef int (*FUN)(int*,int,int,int,int);
FUN func;
func=(FUN)::GetProcAddress(hDll, "calc");
res=(*func)(mas,Number,am,bm,cm);
if (res==666)
{
::MessageBox(NULL,"ERROR! ","DATA ERROR!",MB_OK| MB_ICONSTOP);
}
else
{ sprintf(s,"%d", res);
MessageBox(s,"Result");
//создание и запись результата в файл
FILE *result;
result=fopen("result.txt","w");
fprintf(result,"%d",res);
fclose(result);
}
::FreeLibrary(hDll);
}
массив заполняется значениями из файла matrix.txt вида :
и собственно сама dll - ка
Код:
#include "stdafx.h"
#include <conio.h>
int calc ( int *mas, int Number, int am, int bm, int cm)
{
int r=Number;
int a=am,b=bm,c=cm,n=5,resalt;
//int mas[5]={0,1,2,3,4};
if(r==9){
_asm{
mov eax,0
mov ecx,n
lea esi,mas
l1:
add eax,[esi]
add esi,4
loop l1
add eax,c
mov resalt,eax
}}
else if(r<=5){
_asm{
mov eax,a
sub eax,c
mov a,eax
mov eax,b
mul b
add eax,a
mov ebx,c
cdq
div ebx
mov resalt,eax
}}
else resalt=666;
return resalt;
}
если массив не передавать а забить в dll типа так
//int mas[5]={0,1,2,3,4};
то dll - ка работает нормально, а массив передать никак не получается. В результате получаем хз что.. типа 343987428... и т.д.
кто разбирается посмотрите что там в коде не так... где то я втыкаю.. или у кого есть ссыль на хелп по передаче массива в dll буду рад почитать.
спасибо.
|
|
|

19.11.2008, 22:19
|
|
Постоянный
Регистрация: 08.05.2006
Сообщений: 816
Провел на форуме: 1845671
Репутация:
1338
|
|
Проблема думаю в том, что mas[0] и mas[1] не идут в памяти друг за другом. а могут указывать на разные адресса в памяти (зависит от компилятора). поэтому здесь нельзя вычислять как mas + Номер элемента*4...
|
|
|

19.11.2008, 22:48
|
|
Познающий
Регистрация: 21.09.2008
Сообщений: 42
Провел на форуме: 127017
Репутация:
61
|
|
Сообщение от GlOFF
Проблема думаю в том, что mas[0] и mas[1] не идут в памяти друг за другом. а могут указывать на разные адресса в памяти (зависит от компилятора). поэтому здесь нельзя вычислять как mas + Номер элемента*4...
ни один компилятор СИ не генерирует массив таким образом как вы сказали
То что вы сказали относится к динамическим спискам. Массивы всегда последовательно располагаются в памяти. На этом свойстве массивов основана адресация по указателю.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|