Страница: 1 | 2 |
Вопрос: Импорт DLL в Visual Basic... (помогите плз.)
Добавлено: 14.02.08 17:10
Автор вопроса: Harter
Помогите мне "очень начинающему" програмисту, я делаю свой проект в котором нужно сохронять параметры в .ini файл, мой друг согласился написать .dll на Дельфе, КАК МНЕ ИМПОРТИРОВАТЬ ЭТУ ДЛЛ В VB???
_________________________________________________________
Я делаю прикольный Текстовый редактор...
Ответы
Всего ответов: 16
Номер ответа: 1
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #1
Добавлено: 14.02.08 17:16
Если в этом текстовом редакторе есть dll на Delphi, то он уже автоматически перестает быть прикольным
Номер ответа: 2
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #2
Добавлено: 14.02.08 23:34
А какая связь между "сохронять параметры в .ini файл" и "мой друг согласился написать .dll на Дельфе"
з.ы. возможно Sharp пояснит, чем плох Дельфи? Я просто о нем ничего практически не знаю, кроме того, что многие его ненавидят
Номер ответа: 3
Автор ответа:
Harter
Вопросов: 32
Ответов: 167
Профиль | | #3
Добавлено: 14.02.08 23:40
А какая разница где будет написана .dll в БЕЙСИКЕ в С++ или на Дельфе???
Я думал что .dll он(о) и в Африке .dll
Номер ответа: 4
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #4
Добавлено: 14.02.08 23:44
Хм, ну как и любые другие функции из системных DLL - просто продекларировать нужно функцию.
Можно в принципе на делфи делать ActiveX DLL, тогда в VB её можно будет подключить, как и любой другой компоент - через references.
Также на этом сайте, пример от sne, вызов функции по имени. Там функция импортируется из dll через LoadLibrary, и вызываетя через GetProcAddres...
Номер ответа: 5
Автор ответа:
Harter
Вопросов: 32
Ответов: 167
Профиль | | #5
Добавлено: 14.02.08 23:47
Польшое при большое спасибо!!!
Я кстати ещё одну тему сейчас создам...
(всё таже)
Номер ответа: 6
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #6
Добавлено: 14.02.08 23:47
Номер ответа: 7
Автор ответа:
Harter
Вопросов: 32
Ответов: 167
Профиль | | #7
Добавлено: 14.02.08 23:48
Я просто с .длл не работал вообще
Номер ответа: 8
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #8
Добавлено: 15.02.08 02:49
Всем
Номер ответа: 9
Автор ответа:
Harter
Вопросов: 32
Ответов: 167
Профиль | | #9
Добавлено: 15.02.08 02:50
Мда, ответ содержательный, назови его недостатки(хотя-бы)
Номер ответа: 10
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #10
Добавлено: 15.02.08 03:31
Delphi это мертворожденное существо компании, в бывшем конкурирующей с Microsoft в определенной нише.
Этими двумя фактами она уже плоха.
ПО сути - ini-файлы давно устарели я бы советовал использовать xml, и работать с ним можно без проблем из VB6/VB .NET (без дополнительных библиотек или с дополнительными библиотеками, смотря какую версию VB .NET будешь использовать).
Вот кстати аргумент в пользу VB .NET 9.0
<Settings>
<Width><%= Me.Size.ToString %></Width>
<Location><%= Me.Location.ToString %></Location>
</Settings>
Номер ответа: 11
Автор ответа:
Harter
Вопросов: 32
Ответов: 167
Профиль | | #11
Добавлено: 15.02.08 03:33
я програмирую на ВБ 6 ! ! !
Номер ответа: 12
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #12
Добавлено: 15.02.08 06:20
Наши соболезнования
Номер ответа: 13
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #13
Добавлено: 15.02.08 11:39
VB6 рулит
Номер ответа: 14
Автор ответа:
D o c a l
ICQ: 408802757
Вопросов: 76
Ответов: 985
Web-сайт:
Профиль | | #14
Добавлено: 15.02.08 11:59
<ukr>Odnoznachno</ukr>
Номер ответа: 15
Автор ответа:
BUMM ®
Вопросов: 8
Ответов: 482
Профиль | | #15
Добавлено: 16.02.08 00:19
процедуры и функции этой длл нужно вызывать также, как и API
вот например длл на делфи:
Library Project2;
uses
windows,
Classes,
SysUtils,
 ialogs,
Graphics;
{$R *.res}
function bmptosepia(const bmp: TBitmap; depth: Integer): Boolean;
var
color,color2:longint;
r,g,b,rr,gg:byte;
h,w:integer;
begin
for h := 0 to bmp.height do
begin
for w := 0 to bmp.width do
begin
//first convert the bitmap to greyscale
color:=colortorgb(bmp.Canvas.pixels[w,h]);
r:=getrvalue(color);
g:=getgvalue(color);
b:=getbvalue(color);
color2:=(r+g+b) div 3;
bmp.canvas.Pixels[w,h]:=RGB(color2,color2,color2);
//then convert it to sepia
color:=colortorgb(bmp.Canvas.pixels[w,h]);
r:=getrvalue(color);
g:=getgvalue(color);
b:=getbvalue(color);
rr:=r+(depth*2);
gg:=g+depth;
if rr <= ((depth*2)-1) then
rr:=255;
if gg <= (depth-1) then
gg:=255;
bmp.canvas.Pixels[w,h]:=RGB(rr,gg,b);
end;
end;
end;
Function ShowImageInDelphi(Himg:Int64):Int64 export; Stdcall;
var
img : TBitmap;
Col1Pixel : String;
begin
img := TBitmap.Create;
Img.Handle := Himg;
Col1Pixel := IntToStr(colortorgb(Img.Canvas.pixels[0,0]));
Showmessage('HEIGHT: ' + IntToStr(Img.Height) + ' ' + 'Width: ' + IntToStr(Img.Width ) + ' First pixel color: ' + Col1Pixel );
bmptosepia(Img, 20);
ShowImageInDelphi := Img.Handle ;
End;
exports
ShowImageInDelphi name 'ShowImageInDelphi';
begin
end.
ShowImageInDelphi - это экспортируемая функция. Она конвертирует изображение, производя эффект "старое фото" или "песок". Так как кроме строк и номеров передавать ничего не рекомендуется, будем передавать указатель.
на vb7 примерно так:
Declare Ansi Function ShowImageInDelphi Lib "Project2.dll" (ByVal h As Integer) As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConvert.Click
If IsNothing(imgFirst) Then Exit Sub
Dim Origin As Drawing.Bitmap = imgFirst
Dim HandleSend As Integer, HandleReceive As Integer
Dim sysPTRin As System.IntPtr = Origin.GetHbitmap()
Dim sysPTRout As System.IntPtr
HandleSend = sysPTRin.ToInt64()
HandleReceive = ShowImageInDelphi(HandleSend)
sysPTRout = IntPtr.op_Explicit(HandleReceive)
Dim dest As Drawing.Bitmap
dest = dest.FromHbitmap(sysPTRout)
Me.PictureBox2.Image = dest
Me.PictureBox1.Update()
Me.Validate()
End Sub
естесственно если твой знакомый сделал либу на Delphi2006 c .NET, то вызывать нужно как обычную НЕТовскую сборку