Конференция "Corba" » Ошибка при подключении interface в Com объекте [Delphi, Windows]
 
  • systopler (17.08.07 14:45) [20]
    у меня с инетом не очень :(
    не могу достучаться до странички, которую ты мне скинул...
    можешь сказать в двух словах?
  • Lacmus © (17.08.07 14:53) [21]
    >3221225501'

    C000001D



    CoLoadLibrary
    Loads a specific DLL into the caller's process. CoLoadLibrary is equivalent to LoadLibraryEx. CoLoadLibrary does not do anything about the lifetime of the library.

    Copy Code
           HINSTANCE CoLoadLibrary(
     LPOLESTR lpszLibName,
     BOOL bAutoFree
    );
    Parameters

    lpszLibName
    [in] Points to the name of the library to be loaded. The use of this name is the same as in the Win32 function LoadLibrary.

    bAutoFree
    [in] If TRUE, indicates that this library is freed when it is no longer needed, through a call to either the CoFreeUnusedLibraries or CoUninitialize functions. If FALSE, the library should be explicitly freed with the CoFreeLibrary function.

    Note:  
    The bAutoFree parameter is used only for 16-bit applications. This parameter is ignored for 32-bit and 64-bit applications.


    Return Values

    Module Handle
    Handle of the loaded library.

    NULL
    Library could not be loaded.

    Remarks

    The CoGetClassObject function does not call CoLoadLibrary. CoLoadLibrary loads a DLL specified by the lpszLibName parameter into the process that called CoGetClassObject. Containers should not call CoLoadLibrary directly.

    Internally, a reference count is kept on the loaded DLL, by using CoLoadLibrary to increment the count and the CoFreeLibrary function to decrement it.




    А в VBA и С# работает в тестовых проектах ?
  • Сергей М. © (17.08.07 14:56) [22]

    > systopler


    > не долго думая сделал «Import Component»


    Для начала делай как положено - "Import Type Library .."

    Устанавливать соотв.компонент совсем не обязательно, хотя такая возможность будет тебе предложена в ходе работы импорт-визарда.

    И с бубном прыгать тоже не обязательно - у тебя есть VB-код, успешно работающий с той библ-кой, вот его и портируй в Делфи-код.

    Если есть сомнения, приводи сюда этот VB-код, от него и надо плясать.
  • systopler (17.08.07 15:06) [23]
    Спасибо.


    > > не долго думая сделал «Import Component»
    > Для начала делай как положено - "Import Type Library .."


    Я так и сделал. "Import Type Library .." появляется после того как в меню нажимаешь на «Import Component»

    Работающий код на VBA:
    Public Type TParamConnect
      Base As String
      Server As String
      BackupPath As String
      User As String
      Password As String
    End Type

    Public Function ConnectAdd(ParamCon As TParamConnect, strAliasDb As String) As deObjDBLib.IObjDBConnection
      Dim pXmlDoc As New MSXML2.DOMDocument
      Dim xmlField As IXMLDOMElement
      Dim pObjDb As New deObjDBLib.ObjDB
     
      Set xmlField = pXmlDoc.appendChild(pXmlDoc.createElement("CONNECTION"))
      xmlField.setAttribute "Base", ParamCon.Base
      xmlField.setAttribute "Server", ParamCon.Server
      xmlField.setAttribute "BackupPath", ParamCon.BackupPath

      Dim pNewConn As deObjDBLib.IObjDBConnection
      Set pNewConn = pObjDb.Connect(xmlField, ParamCon.User, ParamCon.Password)
      Set ConnectAdd = pNewConn
    End Function

  • Lacmus © (17.08.07 15:30) [24]
    Видимо надо попробовать оставить одну строчку


    Dim pObjDb As New deObjDBLib.ObjDB

  • systopler (17.08.07 15:40) [25]
    Я чего-то не уловил мысли.
    Зачем и где оставить одну строчку?
  • Lacmus © (17.08.07 15:50) [26]
    >systopler   (17.08.07 15:40) [25]

    Тестовый проект на VBA


    Dim pObjDb As New deObjDBLib.ObjDB

  • Плохиш © (17.08.07 16:04) [27]

    > systopler   (17.08.07 05:32)  


    procedure TForm1.Button1Click(Sender: TObject);
    var
    v : IObjDB;
    begin
     v := CoObjDB.Create;
    end;

  • systopler (17.08.07 16:11) [28]
    в VBA так делать нельзя.
    верней, можно, но этот код ничего не даст.
    (эта строчка просто игнорится)

    Этот код отлично работает:
    Sub Макрос1()
    '
    '
    Макрос1 Макрос
    '
      Dim pObjDb As deObjDBLib.ObjDB
      Set pObjDb = New deObjDBLib.ObjDB
      Set pObjDb = Nothing
    '

    End Sub

  • systopler (17.08.07 16:16) [29]

    > procedure TForm1.Button1Click(Sender: TObject);
    > var
    > v : IObjDB;
    > begin
    >  v := CoObjDB.Create;
    > end;



    Выдает туже самую ошибку.
  • Lacmus © (17.08.07 16:36) [30]
    >systopler   (17.08.07 16:11) [28]

    Код был взят из systopler   (17.08.07 15:06) [23]

    CoInitFlags не пробовали менять в начале проекта Delphi ?
  • systopler (17.08.07 16:49) [31]
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      CoInitFlags := Х;
    end;



    где Х я ставил:
    COINIT_MULTITHREADED, COINIT_APARTMENTTHREADED,  COINIT_DISABLE_OLE1DDE и
    COINIT_SPEED_OVER_MEMORY

    результат один и тот же...
  • Плохиш © (17.08.07 16:58) [32]
    Спросил у яндекса, что за ошибка C000001D, везде говорят, что виновата библиотека, ошибка в ней...
  • Lacmus © (17.08.07 17:13) [33]
    >systopler   (17.08.07 16:49) [31]

    Project-View Source

    Перед Application.Initialize;
  • systopler (17.08.07 17:18) [34]
    Уже и там сделал, но результат тот же.
  • systopler (17.08.07 17:31) [35]
    Почему VBA открывает и работает с Dll-кой, а Delphi не хочет?
  • Lacmus © (17.08.07 17:34) [36]
    >systopler   (17.08.07 17:31) [35]

    Модуль не коммерческий ?
  • Lacmus © (17.08.07 17:38) [37]
    А systopler   (17.08.07 16:11) [28] где пробовали ?
  • systopler (17.08.07 17:38) [38]
    Коммерческий... мне его дали на расширение, т.е. я должен сделать еще несколько Com объектов (в другой dll-ки), которые будут АКТИВНО использовать эту Dll-ку.
  • Lacmus © (17.08.07 17:39) [39]
    >systopler   (17.08.07 17:38) [38]

    Попробуйте без отладчика.
 
Конференция "Corba" » Ошибка при подключении interface в Com объекте [Delphi, Windows]
Есть новые Нет новых   [134431   +9][b:0][p:0.002]