Вызов методов DCOM / COM + с бинарным нацеливанием на x64 сервера x64 не удался, есть идеи почему? - PullRequest
0 голосов
/ 30 декабря 2018

Извиняюсь за любые глупые ошибки, которые я допустил в своем коде - я новичок в DCOM и VC ++ в целом.Я знаю основы, но, к сожалению, этого недостаточно, чтобы понять это.

В настоящее время у меня есть некоторый код VC ++, который вызывает эквивалент этого в Powershell

$excel = [activator]::CreateInstance([type]::GetTypeFromProgID("Excel.Application", "127.0.0.1")); $excel.RegisterXLL("Path\to\x64\dll.dll").Теперь, если я использую этот фрагмент кода PS на обеих платформах x86 Powershell и x64 Powershell для COM-сервера x64, он, ну, в общем-то, работает.

Затем я попытался реплицировать его на C ++ и получил это далеко.Для пояснения, SimpleDLL - это чрезвычайно простая DLL, которая вызывает WinExec () в DLLmain и вызывает приложение калькулятора.

https://gist.githubusercontent.com/realoriginal/4178718ee114e3e23c5ebe4651763044/raw/425ce397ed4788c9fac25ae39dcfe1db779c8d99/source.c

Этот код работает нормально, если сервер x64 и его скомпилировали какдвоичный файл x64Кроме того, это также работает, если сервер x86, а двоичный файл скомпилирован в x86.

Проблемы начнут возникать, если я выберу сервер x64 с двоичным файлом x86.Я пытался использовать CLSCTX_ACTIVATE_32_BIT_SERVER, но это совсем не работает, так как метод доступен только в x64.

С другой стороны, если я оставлю его как есть, он иногда работает,Чтобы объяснить, что я иногда имею в виду, вот мои результаты, которые я получаю от этого клиента x86, предназначенного для сервера Windows x64, вызывающего этот метод.

  1. Клиент вызывает НАРУШЕНИЕ ДОСТУПА с 0x000001 (понятия не имею, почему)
  2. Ошибки клиента в CoCreateInstanceEx () с 0x8007000E: Not enough storage is available to complete this operation.
  3. Он загружает DLL-библиотеку x64 и выскакивает калькулятор на удаленный сервер

У меня вопрос, чтоможет быть причиной сбоя в тех случаях, которые он сделал, и как я могу заставить его работать 100% времени с клиентом x86 по отношению к x64 COM + Windows Server?

...