C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
C# (пошарпаный Си)
Grigoriy
Отправлено: 14.07.2006, 11:29


Мастер участка

Группа: Участник
Сообщений: 381



Насчет языка C#.
Хотя нет специального раздела в этом форуме, я здесь сообщу.
Есть раздел Borland Developer Studio 2006. Но может туда редко смотрят.

В общем непонятно несколько вещей. Наверно это там нельзя сделать...

Как вызвать API на C# ?
Как вставить машинный код ?

Может я задаю смешные вопросы ? Вы подумаете, какие АПИ могут пригодится в C#. НО этот язык вообще какой-то странный. Куча всяких ограничений ! Вызываемые подпрограммы могут быть только методами какого-нибудь класса. Про АПИ наверно там и не предусмотрено ничего.
ShibaOn
Отправлено: 15.07.2006, 15:09


Дежурный стрелочник

Группа: Участник
Сообщений: 37



Не охота тебя разочаровывать, но шарп и WinAPI — вещи на сто процентов не совместимые, так как шарп работает через .NET, а тот, в свою очередь является многоплатформенным, по этому чисто виндовские функции из него вызывать нельзя. Вообще для серьезного девелопера С# неприемлем — кто захочет чтобы его прога работала через какую-то там виртуальную машину? Оставайся верен С++ — он ещё долго не выйдет из моды smile.gif .
Grigoriy
Отправлено: 15.07.2006, 17:14


Мастер участка

Группа: Участник
Сообщений: 381



Изначально я заценил относительно небольшой размер "*.exe"- файла. Я положил на форму всего лишь одну кнопку и один строковый редактор и написал обработчик события нажатия на кнопку, чтобы тот в редакторе помещал строку-константу. Размер программы оказался всего 8 кбайт. А после архивации и того меньше — 3 кбайта. Тогда я подумал все свои программы перекомпилировать на C#. Но не там то было.
Позже я узнал о C#.

Насчет АПИ. Выход из запрета АПИ есть.
Нужно сделать методы какого-нибудь класса импортируемыми из библиотек user32.dll gdi32.dll kernel32.dll подпрограммами и тогда можно будет напрямую вызывать АПИ. Единственное что плохо — типов структур используемых АПИ-функциями не описано стандартно. Ну и то можно самому описать.

Вот пример рисования линии в окне программы с помощью АПИ
MoveToEx
LineTo
на C#

CODE

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Runtime.InteropServices;


struct POINT
{
int X;
int Y;
};
unsafe public class API
{
[DllImport("User32.dll")]
public static extern int MessageBox(int h, string m, string c, int type);
[DllImport("User32.dll")]
   public static extern void* GetDC(
 void* hWnd   // handle to window
 );
[DllImport("Gdi32.dll")]
public static extern bool MoveToEx(
 void* hdc,          // handle to device context
 int X,            // x-coordinate of new current position
 int Y,            // y-coordinate of new current position
 void* bf   // old current position
);
[DllImport("Gdi32.dll")]
 public static extern bool LineTo(
 void* hdc,    // device context handle
 int nXEnd,  // x-coordinate of ending point
 int nYEnd   // y-coordinate of ending point
);

};
//---------------------------------------
unsafe private void button1_Click(object sender, System.EventArgs e)
 {
 void* DC;
 POINT p;
 DC=API.GetDC((void*)this.Handle);
 API.MoveToEx(DC,20,20,&p);
 API.LineTo(DC,200,200);
 }


рисует.
Grigoriy
Отправлено: 15.07.2006, 17:22


Мастер участка

Группа: Участник
Сообщений: 381



Сегодня ночью буду скачивать Visual C++.
Скачаю — заценю.
ShibaOn
Отправлено: 15.07.2006, 17:59


Дежурный стрелочник

Группа: Участник
Сообщений: 37



smile.gif Среда во всех отношениях хорошая. Правда VCL не поддерживает smile.gif

Вернуться в Вопросы программирования в C++Builder