Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2016, 12:11   #1
3dik
 
Регистрация: 15.02.2013
Сообщений: 7
Вопрос DLL из Visual C# в Delphi 2010

Друзья, подскажите как можно использовать в Delphi 2010 dllку, написанную в Visual C# 2010 ? И вообще возможно ли это. Я попробовал простейшее. При нажатии на кнопку, в поле мемо должен загрузиться текст, который я передал в библиотеку. ДЛЛка просто принимает строку и возвращает её же. Ниже предоставляю Код Делфи проекта с формой, кнопкой и полем мемо. Еще ниже код длл написанной в C#. И еще ниже код длл, написанной в делфи. Одна работает, другая нет.

код делфи проекта:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdTCPConnection, IdTCPClient, IdHTTP, IdBaseComponent, IdComponent,
  IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdSSL, IdSSLOpenSSL,
  StdCtrls;

type
  TForm1 = class(TForm)
    IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL;
    IdHTTP1: TIdHTTP;
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//Функция из дллки
function getText(_s : string) : string; stdcall; external 'GetInnerText.dll';

procedure TForm1.Button1Click(Sender: TObject);
begin
//передаю туда текст, который она вернет обратно
memo1.Text := getText('чччччччч');

end;

end.

Код ДЛЛ, написанной в Visual C# 2010:
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

public class GetInnerText
{
    public static string getText(string _s)
    {
        return _s;
    }

}
Что я делаю не так?
ДЛЛка, написанная в самой делфи работает. Вот ее код:

Код:
library GetInnerText;
uses
        SysUtils,
        Classes,
        Forms;

{$R *.RES}

function getText(_s : string) : string ;  stdcall; export;
begin
        result := _s;
end;

exports getText;

begin
end.
3dik вне форума Ответить с цитированием
Старый 19.12.2016, 12:50   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Deplhi string <> C# string
слова одинаковые, а смысл разный.

и даже более того
Delphi Exe string <> Delphi DLL string
но это "будет" заметно потом, на более сложных проектах. читай про ShareMem (хотя может в D2010 это уже не актуально? )

используй
Delphi PAnsiChar <--> C# ????? (возможно тот же string? )
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 19.12.2016, 13:20   #3
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

А разве .NET библиотеки можно использовать в компилируемых языках?
Наоборот то точно можно. Но чтобы так как Вы хотите не раз не встречал.
Вернее можно через COM... Но зачем это надо? Не проще написать библиотеку на Delphi?

Последний раз редактировалось FaTaL; 19.12.2016 в 13:35.
FaTaL вне форума Ответить с цитированием
Старый 19.12.2016, 14:08   #4
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Конечно ничего не выйдет. .Net DLL это не совсем библиотека. Это сборка. Она содержит не компилированные функции а указания для среды исполнения.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 19.12.2016, 14:31   #5
3dik
 
Регистрация: 15.02.2013
Сообщений: 7
По умолчанию

Цитата:
Сообщение от FaTaL Посмотреть сообщение
А разве .NET библиотеки можно использовать в компилируемых языках?
Наоборот то точно можно. Но чтобы так как Вы хотите не раз не встречал.
Вернее можно через COM... Но зачем это надо? Не проще написать библиотеку на Delphi?
Просто настоящая проблема в том, что с помощью делфи я не могу сделать Get-запрос по https простоколу. В делфи для этого нужен TIdHTTP и TIdSSLIOHandlerSocketOpenSSL объекты. При выполнении Get запроса программа ругается could not load ssl library. Везде перешарил, говорят надо перетащить в папку с программой две библы - ssleay32.dll и libeay32.dll. Делал ведь - не помогает, причем несколько раз разные версии этих библиотек. Версия компонентов Indy в делфи - 10.5.5 Тогда как в Visual C# я спокойно отправляю Get запрос и получаю нужный мне json ответ, с которым мне надо работать. И вот я решил взять и сделать библиотечку в Visual C#, в которую должен передать текст запроса, а она сделает своё дело, и вернет мне ответ с сервера в виде строки.
3dik вне форума Ответить с цитированием
Старый 19.12.2016, 14:35   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Через одно место и это программист... Нет нормально сделать на одном языке, так давайте затребуем еще и дот нет. Лучше уж на винапи тогда InternetOpen, InternetConnect, HttpOpenRequest...
p51x вне форума Ответить с цитированием
Старый 19.12.2016, 15:00   #7
3dik
 
Регистрация: 15.02.2013
Сообщений: 7
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Через одно место и это программист... Нет нормально сделать на одном языке, так давайте затребуем еще и дот нет. Лучше уж на винапи тогда InternetOpen, InternetConnect, HttpOpenRequest...
А можно с этого места поподробнее? ну или если лень то ссылочку)
3dik вне форума Ответить с цитированием
Старый 19.12.2016, 15:06   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

https://support.microsoft.com/en-us/kb/168151 а дальше по описаниям функции в мсдн, если что не понятно
p51x вне форума Ответить с цитированием
Старый 19.12.2016, 15:07   #9
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Какой Get запрос нужно сделать, методом Dephi тоже все это можно сделать.
К примеру

Код:
var
  HTTP: TIdHTTP;
begin
  HTTP := TIdHTTP.Create(nil);
  try
   HTTP.HandleRedirects := true;
   HTTP.Get('http://www.mail.ru');
   Showmessage(HTTP.Request.URL); 
   finally
    HTTP.Free;
  end;
end;
Aliens_wolfs вне форума Ответить с цитированием
Старый 19.12.2016, 15:22   #10
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Aliens_wolfs, вы тему читали? Он в курсе и даже про либы для ссл...
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
bass.dll в delphi 2010 Fobes Помощь студентам 1 18.04.2014 12:35
Visual Studio 2010 и SharePoint 2010 glinka-82 Общие вопросы .NET 0 21.03.2012 22:37
Delphi XE vs Visual Basic 2010 ~Ё->77 Софт 5 01.08.2011 18:31
Visual C++ 2010 и msvcr100.dll и др. Styks Visual C++ 4 13.06.2011 23:55
Совместимость LibMySQL.dll с Delphi 2010 kGpROGER БД в Delphi 1 30.12.2010 15:09