| 
		
	
	
	
	
	   Вопросы по разработке. | 
	 
	    
	  | 
	           | 
	 
   
	 
  
 
	
		| DarkMaster | 
		
			
			
				   27.5.2016, 13:29
			 
			
			
		 | 
	 
	
		
        	
  
        		           
  
        		Модератор UOPilot 
        		Сообщений: 9.766 
        		Регистрация: 2.12.2008         		Группа: Супермодераторы Наличность: 30011         		
        		Пользователь №: 11.279
  
        		 
        	 
        	   
        | 
       
			
			Cockney, ты использовал новый интерфейс плагинов с передачей результата по указателю? У меня пустоту возвращает хоть убей. Причем структуру создаю, все назначаю, старый вариант по всей цепочке указателей значение считывает нормально: Код      sprintf_s(ParamStruct->Result,         "%u     " "%u     " "%s", &ResultStruct.RArray, ParamStruct->pResultStruct, ParamStruct->pResultStruct->RArray          ); Но как только я ствалю: Код ResultStruct.used = true; пустота приходит. Сообщение отредактировал DarkMaster - 27.5.2016, 20:03 
			
			
  -------------------- 
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____ Контакт актуален, подпись актуальна. 
					
		 | 
	 
	
		| 
			
		 | 
		
			
			
			
         	
          | 
	 
	| 
	
	 | 
 
 
	
		| DarkMaster | 
		
			
			
				   27.5.2016, 18:43
			 
			
			
		 | 
	 
	
		
        	
  
        		           
  
        		Модератор UOPilot 
        		Сообщений: 9.766 
        		Регистрация: 2.12.2008         		Группа: Супермодераторы Наличность: 30011         		
        		Пользователь №: 11.279
  
        		 
        	 
        	   
        | 
       
			
			С адресами я тоже тупил. Точнее я думал структуру создаст пилот, а мне ее надо только принять, соответственно писал сначала в молоко и понять ничего не мог. Но сейчас вроде как все нормально сделано... Код include <stdexcept>
  using namespace std;
  struct tInitStruct {     long unsigned FunctionCount;     const char** FunctionNames; };
 
  struct tResultStruct // Заполняется плагином. Память под строку выделяется и освобождается плагином. {     bool used;   // Используется ли эта структура при возврате значения. = false     unsigned int RLength;  // Размер данных.     char *RArray;     // Указатель на возвращаемую строку.     unsigned int Reserved1;     unsigned int Reserved2;     unsigned __int64 Reserved3;     unsigned __int64 Reserved4; }; tResultStruct ResultStruct;
 
 
  struct tParamStruct {     int unsigned* WindowHandle; // Handle of workWindow     int unsigned* WindowPID; // pid of process of workWindow     tResultStruct *pResultStruct;     char* ParamString; // string of parameters with substituted variables     char* ParamStringOrig; // original string of parameters     char Result[32767]; // array for returned values };
 
  tParamStruct *ParamStruct;       // init by UOPilot static tInitStruct InitStruct;   // init by plugin, free on unload
 
  extern "C" __declspec(dllexport) unsigned long * __stdcall InitPlugin(int App, int Scr, double& Version) {     // Количество полезных экспортируемых функций для сообщения пилоту     // в зависимости от версии протокола обмена между пилотом и плагином.     // Это НЕ версия самого пилота, а версия протокола обмена между пилотом и длл.     if (Version >= 2.18)     {         InitStruct.FunctionCount = 2;         InitStruct.FunctionNames = new const char*[InitStruct.FunctionCount];         InitStruct.FunctionNames[0] = "Function1";         InitStruct.FunctionNames[1] = "Function2";     }     else     {         InitStruct.FunctionCount = 0; // Выгурзит длл, т.к. функций для экспорта нет.     }     return (&InitStruct.FunctionCount); }
 
  static char message[] = "123\0"; // Образец функции возвращающей строку. extern "C" __declspec(dllexport) void __stdcall Function2(tParamStruct *ParamStruct) {         // Так работает по старой схеме:     ResultStruct.RArray = message;     ResultStruct.RLength = 4;     ParamStruct->pResultStruct = &ResultStruct;     sprintf_s(ParamStruct->Result,              "%u     " "%u     " "%s", &ResultStruct.RArray, ParamStruct->pResultStruct, ParamStruct->pResultStruct->RArray              );
          // Вот так пустоту возвращает:     ResultStruct.used = true;     ResultStruct.RArray = message;     ResultStruct.RLength = 4;     ParamStruct->pResultStruct = &ResultStruct; }
 
  Т.е. у тебя на практике реально новым методом данные возвращались? Сообщение отредактировал DarkMaster - 27.5.2016, 23:26 
			
  Прикрепленные файлы
  
 socket.7z ( 13,13 килобайт )
Кол-во скачиваний: 1893
  
 msvcp120d.7z ( 150,41 килобайт )
Кол-во скачиваний: 1860
  
 msvcr120d.7z ( 446,96 килобайт )
Кол-во скачиваний: 1637
  
 socket2.7z ( 13,14 килобайт )
Кол-во скачиваний: 2208
  
 socket3.7z ( 13,35 килобайт )
Кол-во скачиваний: 1661
  
 socket4.7z ( 13,35 килобайт )
Кол-во скачиваний: 1922
  
 socket5.7z ( 13,37 килобайт )
Кол-во скачиваний: 1891 
			
  -------------------- 
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____ Контакт актуален, подпись актуальна. 
					
		 | 
	 
	
		| 
			
		 | 
		
			
			
			
         	
          | 
	 
	| 
	
	 | 
 
 
	
		| DarkMaster | 
		
			
			
				   27.5.2016, 19:19
			 
			
			
		 | 
	 
	
		
        	
  
        		           
  
        		Модератор UOPilot 
        		Сообщений: 9.766 
        		Регистрация: 2.12.2008         		Группа: Супермодераторы Наличность: 30011         		
        		Пользователь №: 11.279
  
        		 
        	 
        	   
        | 
       
			
			 дык адрес это и есть unsigned int. Он хранится как беззнаковое 4 байта, т.е. unsigned int. Запись указателя в инт на самом деле это не очень правильно. Т.е. компилятор скажет, что я не прав и нужно приведение, либо, как обычно и делается, сказать компилятору, что данные на самом деле нужного типа(int)pointer. Кардинал это беззнаковый 4 байта?
  Чет я в этой запаре уже пальцы заплетаются. Не крашит - пустоту возвращает. 
			
			
  -------------------- 
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____ Контакт актуален, подпись актуальна. 
					
		 | 
	 
	
		| 
			
		 | 
		
			
			
			
         	
          | 
	 
	| 
	
	 | 
 
 
	
		| Cockney | 
		
			
			
				   27.5.2016, 21:11
			 
			
			
		 | 
	 
	
		
        	
  
        		        
  
        		Master 
        		Сообщений: 1.404 
        		Регистрация: 22.6.2013         		Группа: Пользователи Наличность: 22675         		
        		Пользователь №: 16.156
  
        		 
        	 
        	   
        | 
       
			
			Код tResultStruct = packed record // Заполняется плагином. Память под строку выделяется и освобождается плагином.     used          : boolean;   // Используется ли эта структура при возврате значения. = false     RLength       : Cardinal;  // Размер данных. ТИП НЕ МЕНЯЮ                                       = 0     RArray        : Pchar;     // Указатель на возвращаемую строку.                    = ''     Reserved1     : Cardinal;     Reserved2     : Cardinal;     Reserved3     : Int64;     Reserved4     : Int64;   end;  Код z : tResultStruct; //глобально в инит плагине : Код  //заполним данные     z.RArray := 'f';     z.RLength := Length(z.RArray);
 вызов Код вызов
 
  ParamStruct := AdressPS;   //адрес структуры приведем к инт   ParamStruct^.Reserved := Integer(@z);   z.used := True;   // return value not analized while, may be later   Result := true; Код 21:13:07 4 (autosaved_4.txt, 1): f  
			
			
					
		 | 
	 
	
		| 
			
		 | 
		
			
			
			
         	
          | 
	 
	| 
	
	 | 
 
 
	
		| TemTriss | 
		
			
			
				   8.6.2016, 18:19
			 
			
			
		 | 
	 
	
		
        	 
  
        		  
  
        		Neophyte 
        		Сообщений: 13 
        		Регистрация: 8.6.2016         		Группа: Пользователи Наличность: 0         		
        		Пользователь №: 18.009 
Возраст: 27
  
        		 
        	 
        	   
        | 
       
			
			Цитата(DarkMaster @ 8.6.2016, 18:11)    Это не решается плагином.
 
 Может подскажите а есть ли другие варианты? P.s. сори за офтоп.  
			
			
  -------------------- 
Чай должен быть крепким как бункер, спрятался от всего, а утром очнулся в дурке! 
					
		 | 
	 
	
		| 
			
		 | 
		
			
			
			
         	
          | 
	 
	| 
	
	 | 
 
 
 
	3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0) 
	Пользователей: 0  
 
        				  
  | 
 |