2009-03-26 2 views
1

Я работаю над .NET-приложением для управления принтерами карт DataCard Desktop Card, и я наткнулся на проблему. Чтобы выполнить кодировку Magnetic Stripe и Chip, я должен вызвать функцию в DLL собственного API-интерфейса принтера, чтобы включить интерактивный режим принтеров.Извлечение контекста устройства из .NET print API

Мне удалось создать код P/Invoke для вызова этой нативной функции. Но проблема в том, что этот метод принимает дескриптор Device Context в качестве параметра и должен быть вызван до того, как вызывается функция Gdi32 StartDoc.

В API печати .NET у меня есть доступ к hDC из объекта Graphics. Но насколько я вижу, объект Graphics доступен только ПОСЛЕ ВЫПОЛНЕНИЯ функции StartDoc.

Итак, мой вопрос в том, знает ли кто-нибудь способ получить контекст до вызова StartDoc?

ответ

1

Вы можете сделать OpenPrinter получить дескриптор принтера (HANDLE), а затем вызвать CreateDC, передавая эту ручку, чтобы получить DC в любое время принтера (до StartDoc).

+0

Я предполагаю, что вы имеете в виду функции «winspool.drv» и «gdi32.dll»? Я знаю, что это не сложно сделать, используя собственный C apis. Но мое приложение является .NET-приложением, поэтому я надеюсь, что смогу использовать .NET api, насколько это возможно. –

+0

Вы уже используете P/Invoke, поэтому я отважился ответить на этот вопрос. Упомяните свои потребности в этом вопросе. – dirkgently

+0

Я думаю, что я четко сказал, что моя проблема связана с API-интерфейсом .NET. Однако написать мой собственный p/invoke wrapper для Gdi32, кажется, единственный способ добиться этого. –

Смежные вопросы