Итак, нужно сделать на C# COM объект, к которому затем мы сможем обращаться из нашей программы на Delphi.
- В Visual Studio создаем новый проект New/Project/Visual C#/Class Library.
- В свойствах проекта на вкладке Application жмем кнопку "Assembly Information" и отмечаем "Make assembly COM-visible".
- В свойствах проекта на вкладке Build отмечаем Register for COM interop.
- Для регистрации библиотеки вместо regsvr32 нужно использовать regasm. Вызов будет типа такого:
regasm.exe vcomclasslibrary.dll /tlb:vcomclasslibrary.tlb
regasm.exe обычно расположен тут:
c:\Windows\Microsoft.NET\Framework\v2.0.50727\ - Код на C#:
using System;
using System.Drawing;
using System.Runtime.InteropServices;
namespace VCOMClassLibrary
{
[ComVisible(true)]
public interface IVCOMInterface
{
string LoadImageFromStream(System.IO.Stream stream);
}
[ComVisible(true), ClassInterface(ClassInterfaceType.None)]
public class VCOMClass : IVCOMInterface
{
public string LoadImageFromStream(System.IO.Stream stream)
{
Image img = Image.FromStream(stream);
//put code to load image here
return "OK";
}
}
} - В проекте на Delphi импортируем VCOMClassLibrary (Project/Import Type Library). Пример вызова (в котором я заодно показал как передавать Stream):
procedure TForm1.Button1Click(Sender: TObject);
var
cls: IVCOMInterface;
Stream: IStream;
FileStream: TFileStream;
begin
cls := CreateComObject(CLASS_VCOMClass) as IVCOMInterface;
FileStream := TFileStream.Create('c:\temp\1.jpg', fmOpenRead);
Stream := TStreamAdapter.Create(FileStream, soOwned) as IStream;
cls.LoadImageFromStream(Stream);
FileStream.Free;
end;
===
Перепечатка материалов блога разрешается с обязательной ссылкой на blog.coolsoftware.ru
Перепечатка материалов блога разрешается с обязательной ссылкой на blog.coolsoftware.ru
Комментариев нет:
Отправка комментария