Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/74: Рейтинг темы: голосов - 74, средняя оценка - 4.69
 Аватар для Devastar
3 / 3 / 0
Регистрация: 30.09.2012
Сообщений: 123

Ошибка при подключении посторонней DLL

15.03.2013, 14:49. Показов 14649. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет Господа. Работаю в C# и столкнулся с такой проблемкой.
Создал DLLку через Delphi7. Собственно, вот сам код DLLки.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
library Project1;
 
uses
  SysUtils,
  Classes;
 
function GetSimpleText(LangRus: Boolean): PChar; stdcall;
begin
  if (LangRus) then // Если LangRus = true 
    Result := PChar('Привет Мир!') // выполняется это действие
  else // если нетЮ то
    Result := PChar('Hello, world!'); // выполняется это действие
end;
 
exports GetSimpleText;
 
begin
end.
Подключаю его в C#, пишет:

Не удается добавить ссылку на "путь DLLки...\Project1.dll". Убедитесь, что файл доступен, и является допустимой сборкой или компонентом COM.

Вопрос. Каким образом я могу подключить и работать с посторонней библиотекой. написанная на Delphi7 ?

PS DLLка через Delphi7 выполняется нормально.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.03.2013, 14:49
Ответы с готовыми решениями:

Ошибка при подключении dll на Fortran к C#
Здравствуйте! Я пытаюсь подключить dll на фортране к c#, битность dll и проекта c# 64, каждый раз при запуске программа на c# возникает...

Ошибки при подключении к DLL
Доброе утро всем! Проблема возникает когда подключаются две и более функций DLL (при подключении одной все ок). Подскажите где в коде...

ошибка при статическом подключении DLL
при компиляции Embarcadero Rad Studio 2010 выдает ошибку:

12
28 / 24 / 2
Регистрация: 11.12.2012
Сообщений: 448
15.03.2013, 14:53
А может из-за несовместимости кодов.
0
 Аватар для Devastar
3 / 3 / 0
Регистрация: 30.09.2012
Сообщений: 123
15.03.2013, 15:01  [ТС]
Euroman Хотите сказать, что DLLки написанные либо на Делфи, либо на других языках, нельзя подключить, и работать в C# из за несовместимости кода?
0
169 / 132 / 29
Регистрация: 16.02.2013
Сообщений: 867
15.03.2013, 15:22
Взаимодействие с DLL
не?

Добавлено через 7 минут
как то так -
C#
1
2
[DllImport ("my.dll")]
public static extern IntPtr GetSimpleText(bool LangRus);
1
 Аватар для Devastar
3 / 3 / 0
Регистрация: 30.09.2012
Сообщений: 123
15.03.2013, 15:23  [ТС]
Winhttp22 Спасибо. Возможно, то что надо. Щас почитаю.
0
28 / 24 / 2
Регистрация: 11.12.2012
Сообщений: 448
15.03.2013, 15:27
Цитата Сообщение от Devastar Посмотреть сообщение
Euroman Хотите сказать, что DLLки написанные либо на Делфи, либо на других языках, нельзя подключить, и работать в C# из за несовместимости кода?
Я не знал, просто выдвинул версию
0
 Аватар для Devastar
3 / 3 / 0
Регистрация: 30.09.2012
Сообщений: 123
15.03.2013, 15:38  [ТС]
Winhttp22 что то у меня не получается... Может я что то криво пишу ?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
 
namespace DLLREAD
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        [DllImport("Project1.dll")]
        public static extern IntPtr GetSimpleText(bool LangRus);
 
        private void Form1_Load(object sender, EventArgs e)
        {
            GetSimpleText(true); // По идеи, должен выскочить MessageBox с надписью "Привет Мир!"
        }
    }
}
PS DLLка Project1.dll находится в папке с запускающим файлом если что.
0
169 / 132 / 29
Регистрация: 16.02.2013
Сообщений: 867
15.03.2013, 17:08
По идеи, должен выскочить MessageBox с надписью "Привет Мир!"
а где там MessageBox? функция возвращает указатель на первый элемент массива символов char, от этого и нужно плясать, чтобы получить строку. да и в шарп - не лучшее решение для работы с указателями ( хотя он поддерживает с ними работу), больше подходит си.
тут читай об указателях, чтобы понять , как они устроены, и как работают.
строка char имеет в конце символ "\0", что означает - конец строки. вот в си ты можешь в цикле получать каждый символ, и инкрементировать указатель на след. элемент массива, пока не получишь целую строку. как в шарп это будет - хз. можно записать, как и в си, но это наверное будет неправильное решение?
1
 Аватар для Devastar
3 / 3 / 0
Регистрация: 30.09.2012
Сообщений: 123
15.03.2013, 17:45  [ТС]
Winhttp22 Мне было бы интересно посмотреть на код СИ, как это будет выглядеть... =) Если честно, то я не ожидал что с Шарпом может быть такая фигня... во время Добавления ссылки... там куча компонентов и библиотек, и все открывает без проблем.и работает все по маслу... но там же тоже есть библиотеки наверное. которые написаны на Делфи) а вообще, мне что то кажется, что в самой ДЛЛке, надо что то прописывать, что бы Шарп воспринял его как COM компонент... и работал с ним как и со всеми ДЛЛками....
0
169 / 132 / 29
Регистрация: 16.02.2013
Сообщений: 867
15.03.2013, 19:11
Devastar, ну COM компонент - это таже самая длл, только импортируемые функции записаны в реестре. когда регистрируешь либу - в реестр пишутся функции, которые потом можешь вызывать ( как я понял, опыта разработки COM я не имел)
во время Добавления ссылки
натив библиотеки и .NET - отличаются. чем - сказать не могу, потому что читал уже давно, сейчас не припомню. вроде бы импортированные функции описаны в самой либе .NET, поэтому труда не составляет их вызывать , просто добавив ссылку на либу. с натив либами все по другому - нужно юзать dllimport.
но там же тоже есть библиотеки наверное. которые написаны на Делфи
да не этож фраймворк.
1
 Аватар для Devastar
3 / 3 / 0
Регистрация: 30.09.2012
Сообщений: 123
15.03.2013, 19:59  [ТС]
Winhttp22, значит через dllimport... нужно почитать да поюзать примерчики...

Ps. Спасибо
0
169 / 132 / 29
Регистрация: 16.02.2013
Сообщений: 867
16.03.2013, 14:20
Winhttp22, значит через dllimport..
ага
нужно почитать да поюзать примерчики...
вот примерчик написал, и заодно ознакомился с классом Marshal -
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
namespace ConsoleApplication6 
{ 
public class PleaseSayHelloMan 
{ 
      static void Main(string[] args) { 
        IntPtr i=GetSimpleText(true);
        Console.WriteLine(Marshal.PtrToStringAnsi(i));
        Console.ReadKey();
}
    [DllImport(@"C:\*******\SharpDevelop Projects\qwe\qwe\bin\Debug\Project2.dll")]// полностью путь надо писать к либе
    public static extern IntPtr GetSimpleText(bool LangRus);}
    
 
}
возвращает строку 'Привет Мир!'
1
 Аватар для Devastar
3 / 3 / 0
Регистрация: 30.09.2012
Сообщений: 123
23.03.2013, 22:43  [ТС]
Winhttp22 Вообще Красавчик!!! Благодарю! Спасибо Большое!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.03.2013, 22:43
Помогаю со студенческими работами здесь

Ошибка при подключении библиотеки Dll
Пши программу, которая через Dll общается с другой программой. О Dll известно только одно: названия нескольких функций внутри. Более...

При подключении user32.dll ошибка
format PE GUI 4.0 include '%fasminc%/win32a.inc' ; секции не обозначены, поэтому fasm автоматически создаст секцию .flat ; в...

При подключении DLL: Ошибка при создании объекта из компоненты
Создана DLL. При попытке подключения из 1С получаем сообщение: Ошибка при создании объекта из компоненты c:Program FilesMicrosoft...

Ошибка Отсутствует freetype6.dll при подключении freetype
Подключил freetype, чтобы писать текст в openGL.Выдаёт ошибку Отсутствует freetype6.dll. Не знаю что делать. Заранее спасибо! Как...

Ошибка access violation executing location при динамическом подключении dll
Товарищи, помогите понять, что я упустил. Делаю все dроде как в статьях пишут, но возникает ошибка в процессе выполнения программы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в КА2. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа в КА2. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru