Grigoriy |
Отправлено: 14.07.2006, 11:29 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
Насчет языка C#.
Хотя нет специального раздела в этом форуме, я здесь сообщу.
Есть раздел Borland Developer Studio 2006. Но может туда редко смотрят.
В общем непонятно несколько вещей. Наверно это там нельзя сделать...
Как вызвать API на C# ?
Как вставить машинный код ?
Может я задаю смешные вопросы ? Вы подумаете, какие АПИ могут пригодится в C#. НО этот язык вообще какой-то странный. Куча всяких ограничений ! Вызываемые подпрограммы могут быть только методами какого-нибудь класса. Про АПИ наверно там и не предусмотрено ничего.
|
|
ShibaOn |
Отправлено: 15.07.2006, 15:09 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 37
|
Не охота тебя разочаровывать, но шарп и WinAPI — вещи на сто процентов не совместимые, так как шарп работает через .NET, а тот, в свою очередь является многоплатформенным, по этому чисто виндовские функции из него вызывать нельзя. Вообще для серьезного девелопера С# неприемлем — кто захочет чтобы его прога работала через какую-то там виртуальную машину? Оставайся верен С++ — он ещё долго не выйдет из моды .
|
|
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
|
Среда во всех отношениях хорошая. Правда VCL не поддерживает
|
|