Я пытаюсь проверить, что класс, который я пытаюсь использовать через COM, работает, как ожидалось. К сожалению, кажется, чтобы преуспеть на вызов, который должен FAIL:Функция вызова из класса ComImport не работает, как ожидалось
enum X509CertificateEnrollmentContext
{
ContextUser = 0x1,
ContextMachine = 0x2,
ContextAdministratorForceMachine = 0x3
}
[ComImport(), Guid("884e2045-217d-11da-b2a4-000e7bbb2b09")]
class Cenroll { }
[Guid("728ab35d-217d-11da-b2a4-000e7bbb2b09")]
interface IX509CertificateRequestCmc2
{
void InitializeFromTemplate(
[In] X509CertificateEnrollmentContext Context,
[In] IX509EnrollmentPolicyServer pPolicyServer,
[In] IX509CertificateTemplate pTemplate);
}
static void Main(string[] args)
{
var cr = new Cenroll();
var cmc2 = (IX509CertificateRequestCmc2)cr;
cmc2.InitializeFromTemplate(X509CertificateEnrollmentContext.ContextUser, null, null);
}
Отливки из Cenroll к интерфейсным работ, что свидетельствует о том, что идентификаторы GUID в порядке. (и он не выполняет литье других гидов, так что это не случайный успех)
Но когда я звоню InitializeFromTemplate
, оба параметра установлены на null
, он преуспевает. documentation говорит, что результат должен быть E_POINTER
ошибка:
Return code - Description
E_POINTER - The pPolicyServer and pTemplate parameters cannot be NULL.
Так почему же я не вижу исключение?
Спасибо, что действительно решает этот вопрос! Почему я не использовал созданные классы взаимодействия: документация настолько плоха, что мне потребовалось несколько дней, чтобы понять, что я могу. И это после выяснения xenroll-vs-certenroll, использования COM и т. Д. – viraptor
Это может быть сложно, это правда :) –