Разница между C # и консольным сеансом VB.NET - PullRequest
0 голосов
/ 06 марта 2012

Хорошо, у меня есть этот код , написанный на C ++, который вызывает функцию SetThreadDesktop. Я вызываю эту функцию из dll при запуске в качестве системного пользователя в Windows XP.

При вызове из консольного приложения C # функция завершается успешно, но при вызове из консольного приложения VB.NET - нет. С GetLastError я увидел, что сообщение об ошибке было таким:

SetThreadDesktop failed with error 170: The requested resource is in use (translated from french)

Как получается, что оно работает для консольного приложения C #, а не для VB.NET? Кстати, оно также не работает для приложения winform. Может ли какой-нибудь мастер .NET объяснить это мне? Это опция компилятора, которую я должен изменить?

Спасибо

Ответы [ 2 ]

2 голосов
/ 06 марта 2012

Попробуйте добавить атрибут <MTAThread> в свой метод (VB) Main, как объяснено здесь .

Это действительно единственное, что отличается в проектах C # и VB Console по умолчанию.

1 голос
/ 06 марта 2012

Разве вы не должны объявлять функцию extern как public shared?

<DllImport("AltCtrlDelCpp.dll")> _
Public Shared Function SimulateAltControlDel() As Boolean
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...