Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Передача картинки в фции других языков Добавлено: 03.06.07 18:01  

Автор вопроса:  HACKER
Задача состоит в передачи картинки из вб6 в функцию реализованную на другом языке (Delphi, VC++) в виде DLL. Я не очень разбираюсь в Delphi и VC++ поэтому вопрос состоит в способах передачи картинок, и как дальше обрабатывать полученную картинку..

Ну например, в вб6 я загружаю картинку в stdPicture, если б мне нужно было передать её в функцию на этом же вб6, прототип функции бы был примерно

function (pic as stdPictute)

Как например быть в этом случае с Delphi и VC++? Какой прототип функции в Delphi и VC++ если я передаю strPictute из вб6? Как потом работать с полученной картинокой? (Взять цвет определённого пикселя)?

Или может не морочить голову, а создать DC, загрузить в него картинку и передавать указатель?

Как лучше? :) Какие ещё способы возможны?

Ответить

  Ответы Всего ответов: 21  

Номер ответа: 1
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #1 Добавлено: 03.06.07 18:23
IPictureDisp -- стандартный вполне интерфейс.
Им параметр и объявляй.

Ответить

Номер ответа: 2
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #2
Добавлено: 03.06.07 18:43
Или может не морочить голову, а создать DC, загрузить в него картинку и передавать указатель?
а чем плохой способ?
С++ любит указатели

Ответить

Номер ответа: 3
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #3 Добавлено: 03.06.07 19:53
Тупой вопрос, а

dim pic1 as IPictureDisp

тоже самое что

dim pic2 as Picture

?

%)

Ответить

Номер ответа: 4
Автор ответа:
 Silver Ferrum



ICQ: 422640045 

Вопросов: 12
Ответов: 144
 Профиль | | #4 Добавлено: 03.06.07 20:10
а что это за Picture? Picture это вроде бы свойство контролов, которая указывает фоновый рисунок...

Ответить

Номер ответа: 5
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #5 Добавлено: 03.06.07 21:04
Silver Ferrum
чё правда?! Никогда бы не догадался без тебя...

P.S. Пока я не получу от темы нужную мне информацию для того чтобы полностью разобраться в задче, я очень не люблю когда в ней флудят...

Ответить

Номер ответа: 6
Автор ответа:
 BUMM ®



Вопросов: 8
Ответов: 482
 Профиль | | #6 Добавлено: 04.06.07 01:43
зависит не от того КАК ты ее передаешь, а как ее получает программа или длл. Например в делфи, да и в других языках картинку можно принимать как файл, указатель или байтовый массив, да как угодно вобщем. Конкретней задай вопрос, в какую прогу передаешь картинку? По делфи могу помочь

Ответить

Номер ответа: 7
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #7 Добавлено: 04.06.07 01:57
Ну даже незнаю как конкретнее, попробую..

в вб6
Dim pic as Picture
pic = LoadPicture ("C:\1.bmp";)

Далее этот пик нужно передать в функцию на делфи например.

Вопросы:
Как передать pic?
Как принять на другой стороне? (прототип функции)
Как работать с полученным пик на другой стороне? (Получить цвет пикселя)

Лучше примерчиком..

Вот ты говориш в делфи разбираешся. Напищи плз функцию которая принимает один параметр (если надо - больше) - картинку из вб6. И MassageBox'ни цвет пикселя 1,1

P.S. Или лучше всё же через IPictureDisp? Я не говорю что на вб должно быть менно так как я написал, я рассматриваю все варианты и выбираю лучший...

Ответить

Номер ответа: 8
Автор ответа:
 dNW



Вопросов: 30
Ответов: 683
 Профиль | | #8 Добавлено: 04.06.07 07:30
А ты не пробовал загрузить картинку в PictureBox и передавать программам hDC?

Если все же хочешь через пикчер - по-моему функции OLELoadPicturePath и OLECreatePictureIndirect работают с IPicture

Ответить

Номер ответа: 9
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #9 Добавлено: 04.06.07 14:56
Такс, чуствую совсем дело плохо, походу я заблудился...

Объясните мне разницу между
IPicture
IPictureDisp
StdPictute
dim lala as Picture

Где-то в подсознании я понимаю что это не 4 разных типа, но конкретно связать ничего не могу.

Ответить

Номер ответа: 10
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #10
Добавлено: 05.06.07 01:15
StdPictute и Picture одно вроде бы псевдоним для другого :)

IPicture и IPictureDisp это интерфейсы, например ты не сможешь их объявить с ключевым словом New :) Вроде бы тоже одно и то же, т.к. VB работает с COM исключительно через IDispatch, хотя возможно и ошибаюсь (так было в старых версиях VBA, нового не копал)

HACKER, вобщем тебе тут хочут сказать что не парься, если ты обычную нашу picture передаш, то и дельфи и Сиплюсы все поймут, при желании :)

Ответить

Номер ответа: 11
Автор ответа:
 BUMM ®



Вопросов: 8
Ответов: 482
 Профиль | | #11 Добавлено: 06.06.07 01:48
to HACKER:
Dll могу написать толко в суб. или воскрю так как на работе делфи нету, а дома нету времени. Если подождешь - будет тебе пример.
Ну а пока совет: 100% рабочий способ: лет 6-7 назад делал на делфи3 длл для похожих целей. Нужно было передавать массив байт в длл для обработки.
Из других прог выделялся кусок оперативки и забивался данными а потом вызывалась функция из моей длл и как параметр передавался только указатель. Функция в длл читала массив из оперативки по указателю.
Этот же способ можно использовать для картинки или любых других данных.
Способ 2: Делфи 5 -6 я пропустил а в 7-ке и выше можно было использовать SOAP
HACKER, вобщем тебе тут хочут сказать что не парься, если ты обычную нашу picture передаш, то и дельфи и Сиплюсы все поймут, при желании :)

  С геморроем и головной болью да.
Лучше всего как параметр передавать стандартные типы - Строка или Integer Long (как указатель на память или путь к файлу)

Ответить

Номер ответа: 12
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #12 Добавлено: 06.06.07 02:06
sne, хм.. ну ок, если я передаю нашу picture ..
1) Можно пример функции которая принимает picture на сях?
2) Если там указатель, на.. на что там будет указатель? Как вообщем работать с тем что я передам на сях дальше? :)

BUMM, Спешить мне некуда, сессия всёравно.. так что я за компом гуляю по инету немного. Если у тебя будет время, и тебя это не затруднит - напиши пожалуйста. Или выложи ту длл которую ты давно писал...
Ещё в принципе варинат, как ты говоришь через указатели.. но "выделять кусок оперативки" - слишком абстрактно как-то. Ты имеешь ввиду shared memory?

P.S.
Я вот думаю, ещё как вариант - передавать массив структур в котором будект картинка попиксельно лежать.. ну типа

struct pic {
 r as byte;
 g as byte;
 b as byte;
 height as long;
 width as long;
};

Мне в принципе то всёравно с ней дальше попиксельно работать :)

Ответить

Номер ответа: 13
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #13 Добавлено: 06.06.07 16:38
От в делфяк допустим фция типа

function myfunc(Imagex:TBitmap):string;

Как сюда передать картинку из вб?

Можно ли провести такой аналог:
TBitmap(Delphi)=StdPicture(VB)

?

Ответить

Номер ответа: 14
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #14 Добавлено: 07.06.07 16:11
^
|

Ответить

Номер ответа: 15
Автор ответа:
 BUMM ®



Вопросов: 8
Ответов: 482
 Профиль | | #15 Добавлено: 08.06.07 00:13

TBitmap(Delphi)=StdPicture(VB)

нет однозначно.

примерно так можно передать массив из Float

примерно так выглядит длл
library MyDll;

uses
  SysUtils,
  Classes,
  ;Dialogs,
  ;DllTypes in 'DllTypes.pas';

{$R *.res}

procedure TestDLL(AArray: TArrayFloat); Stdcall;
var
  i: integer;
Begin
  for i := Low(AArray) to High(AArray) do
    ShowMessage(FloatToStr(AArray));
End;
Exports
  TestDLL name 'TestDLL';
begin
end.

+юнит с интерфейсом

unit DllTypes;

interface

type
  TArrayFloat = array of Float;
  procedure TestDLL(AArray: TArrayFloat);Stdcall;

implementation

  procedure TestDLL(AArray: TArrayFloat); Stdcall; External 'MyDll.dll' name 'TestDLL';

end.



Вызывать также как методы из API

Ты до воскресенья подождать можешь? дам готовую длл-ку

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам