Имя: Пароль:
1C
 
Можно ли создать COM-объект V8 из comcntr.dll
0 Гений 1С
 
07.11.24
18:42
Без регистрации comcntr.dll?
1 bolder
 
07.11.24
18:45
Нельзя,зачем это извращение?
2 Волшебник
 
07.11.24
18:46
Можно
3 Гений 1С
 
07.11.24
18:56
(2) но как, сэр?
(1) потому что и так и через обертку службы компонентов не создается.

{Модуль C:\Users\office\Updater1C\Data\Temp\Updater1C\Script.os / Ошибка в строке: 49 / Внешнее исключение (System.Runtime.InteropServices.COMException): Не удалось получить фабрику класса COM для компонента с CLSID {181E893D-73A4-4722-B61D-D604B3D67D47} из-за следующей ошибки: 80004005 Неопознанная ошибка (Исключение из HRESULT: 0x80004005 (E_FAIL)).}
4 Волшебник
 
07.11.24
18:58
(3) Я отвечаю за стратегию.
5 maxab72
 
07.11.24
20:24
Делов-то, переписать слегка винды под эту задачу...
6 osa1C
 
07.11.24
20:51
(5) Лучше свою операционку написать
7 Волшебник
 
07.11.24
21:01
Можно перейти на веб-сервисы (HTTP)
8 H A D G E H O G s
 
07.11.24
21:16
Можно
9 Garykom
 
07.11.24
21:23
10 H A D G E H O G s
 
07.11.24
22:44
<SUMMARY>function FixinMagic()/SUMMARY>
function FixinMagic(): TResult;
var
  FullFilePath, FileDir: String;
  FileName: String;
  NewID: TGUID;
  LibHandle: THandle;
  AddDllDirectory: TAddDllDirectory;
  DllGetClassObject: TDllGetClassObject;
  res: THandle;
  Factory: IClassFactory;
  unk: IUnknown;
  Obj: IDispatch;

  hkernel32: THandle;
  ErrorCode: Cardinal;
  ErrorDescription: String;
begin
  Result.Result := false;
  FullFilePath := 'C:\Program Files\1cv8\8.3.25.1336\bin\comcntr.dll';
  FileDir := ExtractFilePath(FullFilePath);
  NewID := StringToGUID('{181E893D-73A4-4722-B61D-D604B3D67D47}');
  hkernel32 := GetModuleHandle(Pchar('kernel32.dll'));
  if hkernel32 = 0 then
    hkernel32 := LoadLibrary(Pchar('kernel32.dll'));
  if hkernel32 = 0 then
  begin
    Result.ErrorCode := GetLastError;
    Result.ErrorDescription := _GetErrorMsg(Result.ErrorCode);
    exit;
  end;

  @AddDllDirectory := GetProcAddress(hkernel32, 'AddDllDirectory');
  res := AddDllDirectory(Pchar(FileDir));
  if res = 0 then
  begin
    Result.ErrorCode := GetLastError;
    Result.ErrorDescription := _GetErrorMsg(Result.ErrorCode);
    exit;
  end;
  LibHandle := CoLoadLibrary(Pchar(FullFilePath),true);
  if LibHandle = 0 then
  begin
    Result.ErrorCode := GetLastError;
    Result.ErrorDescription := _GetErrorMsg(Result.ErrorCode);
    exit;
  end;
  @DllGetClassObject := GetProcAddress(LibHandle, 'DllGetClassObject');
  if @DllGetClassObject = nil then
  begin
    CloseHandle(LibHandle);
    Result.ErrorCode := GetLastError;
    Result.ErrorDescription := _GetErrorMsg(Result.ErrorCode);
    exit;
  end;
  res := DllGetClassObject(NewID, IClassFactory, Factory);
  if (res <> S_OK) or (Factory = nil) then
  begin
    CloseHandle(LibHandle);
    Result.ErrorCode := res;
    Result.ErrorDescription := _GetErrorMsg(Result.ErrorCode);
    exit;
  end;
  res := Factory.CreateInstance(nil, IUnknown, unk);
  if res <> S_OK then
  begin
    CloseHandle(LibHandle);
    Result.ErrorCode := res;
    Result.ErrorDescription := _GetErrorMsg(Result.ErrorCode);
    exit;
  end;
  res := unk.QueryInterface(IDispatch, Obj);
  if res <> S_OK then
  begin
    Result.ErrorCode := res;
    Result.ErrorDescription := _GetErrorMsg(Result.ErrorCode);
    exit;
  end;
  Result.Data := Obj;
  Result.Result := true;
end;

procedure TForm2.Button1Click(Sender: TObject);
var
  MagicResult: TResult;
  Connector1C, Connection1C: OleVariant;
begin
  MagicResult := FixinMagic();
  if MagicResult.Result = false then
  begin
    ShowMessage(MagicResult.ErrorDescription);
    exit;
  end;
  Connector1C := MagicResult.Data;

  try
    Connection1C := OleVariant(Connector1C).Connect('Srvr="Localhost";Ref="Empty"');
    ShowMessage(Connection1C.Метаданные.Версия)
  finally

  end;
end;
11 H A D G E H O G s
 
07.11.24
22:36
(10) Там дальше логично вытекает возможность загружать ComConnector в другую версию платформы, но это задачка Гениям на подумать.
12 H A D G E H O G s
 
07.11.24
22:40
Промысел гениев необъясним, но
История помнит и нас судит по ним.
13 Guk
 
07.11.24
22:45
а чо, фиксин на дельфях пишет?...
14 H A D G E H O G s
 
07.11.24
22:47
(13) Не знаю, на чем он там пишет. Я показал набор функций WinAPI, которые помогут ему.
15 Guk
 
07.11.24
23:06
(14) ты прям как читать разучился. у него же в нике четко подчеркнуто - "Гений 1С". не "Гений WinAPI", не "Гений Delphi" и даже не "Гений С++" или "Гений Pascal". он же в твоих буквах не поймет нихера...