<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBS: Указатель на переменную]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=6625&amp;type=atom" />
	<updated>2012-01-01T10:59:33Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=6625</id>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Указатель на переменную]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=55219#p55219" />
			<content type="html"><![CDATA[<p>Почитайте документацию по DWX, про передачу строк там написано. Для получения строк, нужно передать указатель на буфер, его можно выделить, с помощью метода Space, но я всегда использую системные ф-и работы с кучей HeapAlloc/HeapFree.</p>]]></content>
			<author>
				<name><![CDATA[chessman]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25359</uri>
			</author>
			<updated>2012-01-01T10:59:33Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=55219#p55219</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Указатель на переменную]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=55217#p55217" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>chessman пишет:</cite><blockquote><p>Если делать через DWX,то с простыми типами все гораздо проще. Что за параметр нужно передать?</p></blockquote></div><p>В текущей функции передаются указатели на строковые переменные. Причём из одних переменных функция значение считывает, в другие - пишет.<br />В целом, хотелось бы найти общий способ для передачи/считывания указателей на разные типы данных. Как минимум неплохо знать об особенностях обмена указателями на строки и целые числа.</p><p>Так что там с DWX?</p>]]></content>
			<author>
				<name><![CDATA[Vladimir]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27154</uri>
			</author>
			<updated>2012-01-01T10:14:55Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=55217#p55217</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Указатель на переменную]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=55216#p55216" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>chessman пишет:</cite><blockquote><p>Если делать через DWX,то с простыми типами все гораздо проще. Что за параметр нужно передать?</p></blockquote></div><p>Тут надо учесть, что Rundll передаёт параметры в вызываемую функцию в виде строки. Из своей командной строки Rundll вырезает часть, предназначенную для функции, и передаёт её ей в третьем параметре. Потом функция должна распарсить эту строку на отдельные элементы. Так что числа должны передаваться в строковом виде.</p><p>Вот пример функции, вызываемой через Rundll:<br /></p><div class="codebox"><pre><code>VOID CALLBACK InstallHinfSection(
  __in  HWND hwnd,
  __in  HINSTANCE ModuleHandle,
  __in  PCTSTR CmdLineBuffer,
  __in  INT nCmdShow
);

Parameters
hwnd [in] 
The parent window handle. Typically hwnd is Null.

ModuleHandle [in] 
Reserved and should be Null.

CmdLineBuffer [in] 
Pointer to buffer containing the command line. You should use a null-terminated string.

nCmdShow [in] 
Reserved and should be zero.

Return Value
This function does not return a value.</code></pre></div>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2012-01-01T04:21:09Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=55216#p55216</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Указатель на переменную]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=55212#p55212" />
			<content type="html"><![CDATA[<p>Если делать через DWX,то с простыми типами все гораздо проще. Что за параметр нужно передать?</p>]]></content>
			<author>
				<name><![CDATA[chessman]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25359</uri>
			</author>
			<updated>2011-12-31T17:45:47Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=55212#p55212</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Указатель на переменную]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=55209#p55209" />
			<content type="html"><![CDATA[<p>Немного вопрос изучил...</p><p>1) Можно перенести основной функционал приложения в VBA, и получить адрес можно используя функцию VarPtr() - тогда всё легко и красиво. А также вызвать DLL напрямую, без лишнего гемора.<br />&nbsp; &nbsp; а) Также можно создать обёртку в модуле VBA над VarPtr - но есть большое НО, переменные передаются по значению (Используя метод oExcel.Run() или oExcel.Evaluate() - где oExcel, тип Excel.Application), и возвращается адрес копии.<br />&nbsp; &nbsp; б) Хуже ещё, даже если передастся как-то по ссылке, то VarPtr считает адрес из адресного пространства Excel а не WScript - и того чего нужно по адресу мы не найдём.<br />&nbsp; &nbsp; в) Ещё хуже что передают данные с типом Variant... И даже если мы получим адрес, то это будет адрес на Variant, и такой тип передавать в DLL (уверен что она не ждёт этот тип) нельзя.</p><p>2) Используя DynWrapperX, попробовал так:<br /></p><div class="codebox"><pre><code>Dim oDWR, vTest, vTest2, vPnt
Set oDWR = CreateObject(&quot;DynamicWrapperX&quot;)

oDWR.Register &quot;msvbvm60&quot;, &quot;VarPtr&quot;, &quot;i=w&quot;, &quot;r=l&quot;
oDWR.Register &quot;kernel32&quot;, &quot;RtlMoveMemory&quot;, &quot;i=lll&quot;

&#039;Получение указателя на строку
vTest = &quot;Привет!&quot;
vPnt = oDWR.VarPtr(vTest)

&#039;Проверка, чтение из памяти строки
Call oDWR.RtlMoveMemory(vTest2, (vPnt), 16)

MsgBox vTest2</code></pre></div><p>Чтение не удаётся, неверно я типы объявляю... Ещё над этим думаю. Второй параметр надо передать по значению. Адрес на переменную получаю, но это тип Variant. Ещё встречный вопрос... Данные передаваться будут в DLL какими типами? В DWX встроен метод StrPtr - который возвращает адрес на строку. Если нужно передать число, то можно выделить буфер строковой достаточный, туда засунуть число &quot;правильно&quot; и передать правильно адрес на начало числа, тогда функция верно его считает и все будут довольны.</p><p>Если есть вариант сделать на VBA, то основной функционал я бы лучше возложил на нём.</p>]]></content>
			<author>
				<name><![CDATA[VSVLAD]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24998</uri>
			</author>
			<updated>2011-12-31T15:52:47Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=55209#p55209</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Указатель на переменную]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=55208#p55208" />
			<content type="html"><![CDATA[<p>Коллеги, спасибо за участие, но хотелось бы услышать несколько больше, чем общие фразы типа &quot;Смотри в сторону XYZ и всё получится&quot;. Конкретные предложения (с кусками кода) есть у кого-нибудь?</p>]]></content>
			<author>
				<name><![CDATA[Vladimir]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27154</uri>
			</author>
			<updated>2011-12-31T14:51:59Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=55208#p55208</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Указатель на переменную]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=55203#p55203" />
			<content type="html"><![CDATA[<p>DWX изначально разрабатывался для решения подобных задач, так что должно взлететь.</p>]]></content>
			<author>
				<name><![CDATA[chessman]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25359</uri>
			</author>
			<updated>2011-12-31T11:52:14Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=55203#p55203</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Указатель на переменную]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=55200#p55200" />
			<content type="html"><![CDATA[<p>Наличие MS Office на машине считаю допустимым условием.<br />Какио образом &quot;Можно решить проблему связкой WSH-VBA&quot;?<br />Хотелось бы увидеть хотя бы первые шаги в направлении решения задачи.</p><p>Готов рассмотреть и вариант решения с использованием DWX (опционально).</p>]]></content>
			<author>
				<name><![CDATA[Vladimir]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27154</uri>
			</author>
			<updated>2011-12-31T11:30:26Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=55200#p55200</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Указатель на переменную]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=55199#p55199" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>В принципе MsOffice имеется на любом компьютере</p></blockquote></div><p>Лично у меня это Г. отсутствует ввиду абсолютной ненужности.<br />Это я к тому, что не стоит рассчитывать на его наличие.</p><br /><br /><br /><p>На всякий случай и здесь поздравлю всех с праздником.</p>]]></content>
			<author>
				<name><![CDATA[Любитель]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27037</uri>
			</author>
			<updated>2011-12-31T11:20:39Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=55199#p55199</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Указатель на переменную]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=55188#p55188" />
			<content type="html"><![CDATA[<p>В принципе MsOffice имеется на любом компьютере. Можно решить проблему связкой WSH-VBA.</p>]]></content>
			<author>
				<name><![CDATA[JSmаn]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24434</uri>
			</author>
			<updated>2011-12-31T05:07:01Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=55188#p55188</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Указатель на переменную]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=55185#p55185" />
			<content type="html"><![CDATA[<p><strong>chessman</strong><br />Ну так это ведь не соответствует условиям.<br /></p><div class="quotebox"><cite>Vladimir пишет:</cite><blockquote><p>Можно написать свой COM-сервер с фунцией, которая реализует это (получение указателя), но хотелось бы обойтись средствами только WSH. Или использовать какую-либо системную библиотеку, которая гарантировано присутствует в любой (стандартной) версии ОС.</p></blockquote></div>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2011-12-31T01:10:16Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=55185#p55185</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Указатель на переменную]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=55184#p55184" />
			<content type="html"><![CDATA[<p>Юрий, а почему не предлагаете DWX?</p>]]></content>
			<author>
				<name><![CDATA[chessman]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25359</uri>
			</author>
			<updated>2011-12-30T16:32:07Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=55184#p55184</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Указатель на переменную]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=55182#p55182" />
			<content type="html"><![CDATA[<p>Имя ФУНКЦИИ.<br />Впрочем, уже не надо. Я подумал, что это функция WinAPI. Уже не раз бывали вопросы про rundll, где люди не понимали особенностей вызываемых через неё функций. Думали, что любую можно вызвать. Поэтому я и поинтересовался, что за функция. Не буду больше Вас беспокоить вопросами, желаю успеха.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2011-12-30T13:35:10Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=55182#p55182</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Указатель на переменную]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=55181#p55181" />
			<content type="html"><![CDATA[<p>Имя dll-ки назвать не жалко. [accnet.dll]<br />Только что это даёт?<br />Варианты ответа на мой вопрос от этого как-то зависят?</p>]]></content>
			<author>
				<name><![CDATA[Vladimir]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27154</uri>
			</author>
			<updated>2011-12-30T12:56:47Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=55181#p55181</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Указатель на переменную]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=55179#p55179" />
			<content type="html"><![CDATA[<p>Ну, раз имя её не называете. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2011-12-30T12:20:43Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=55179#p55179</id>
		</entry>
</feed>
