Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Экспорт функции из Delphi dll в Visual C++


Автор: q0a0z0w0s0x 26.3.2008, 17:59
Доброго времени суток!
Уважаемые программисты помогите найти решение следующей проблемы:

Есть dll написанная на Delphi, в ней две экспортируемые функции:


Код

library Project1;

uses ShareMem, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, {..} StdCtrls, 

ComCtrls;

{$R *.res}

Function HashF(Fname :string) :String; export; stdcall;
begin
 {..}
end;

Function Crypt_file(inFname,outFname,password :String; algNum :integer) :Boolean; export; stdcall;
begin
 {..}
end;

exports Crypt_file, HashF;

begin
end.




В Visual C++ 9.0 создаю новый проект CLR, Windows Forms Application,  и по нажатию кнопки необходимо использовать 

функции из dll. 
Помогите кто чем может (-:

Автор: Dennnis 26.3.2008, 18:25
Код

class MyDllImport
{
public:

[DllImport("your_dll.DLL",EntryPoint="HashF", CharSet=CharSet::Ansi,ExactSpelling=true, CallingConvention=CallingConvention::StdCall)]
static String^ HashF(String^ Fname);


[DllImport("your_dll.DLL",EntryPoint="Crypt_file", CharSet=CharSet::Ansi,ExactSpelling=true, CallingConvention=CallingConvention::StdCall)]
static bool Crypt_file(String^ inFname, String^ outFname, String^ password, int algNum);

};

Автор: q0a0z0w0s0x 26.3.2008, 20:24
Dennnis, не могу понять, куда этот код вставить, чтобы можно было просто использовать в любой части программы 
String^ HashF(String^ Fname);

напиши хотябы чуть подробнее... 

Автор: Rififi 26.3.2008, 21:18
а что, .net знает про такое чудо как delphi? :eek: и прямо так и маппит егонные стринги в свой System.String?

Автор: Dennnis 26.3.2008, 23:43
Использовать можно ну например так:
Код

#pragma once
namespace FormApplication1 {

    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
    using namespace System::Runtime::InteropServices;//Не забудь - сдесь лежит DllImportAttribute

    public ref class Form1 : public System::Windows::Forms::Form
    {
    public:
        Form1(void)
        {
            InitializeComponent();
            //
            //TODO: Add the constructor code here
            //
        }
        //Импорт
        [DllImport("your_dll.DLL",EntryPoint="HashF", CharSet=CharSet::Ansi,ExactSpelling=true, CallingConvention=CallingConvention::StdCall)]
        static String^ HashF(String^ Fname);

        [DllImport("your_dll.DLL",EntryPoint="Crypt_file", CharSet=CharSet::Ansi,ExactSpelling=true, CallingConvention=CallingConvention::StdCall)]
        static bool Crypt_file(String^ inFname, String^ outFname, String^ password, int algNum);

    //Использование
    private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
                 String^ str = gcnew String("Hello, world");
                 HashF(str);
             }
        ...
    };
}



Цитата

а что, .net знает про такое чудо как delphi? :eek: и прямо так и маппит егонные стринги в свой System.String? 

А почему нет smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)