各位,我在VC++6.0中使用 sqldmo 来启动 sqlserver,可是却不成功,请看以下代码:_SQLServerPtr pSqlserver;
try
{
  HRESULT hr;
  hr = pSqlserver.CreateInstance("SQLDMO.SQLServer");
  if (SUCCEEDED(hr))
     hr = pSqlserver->Start(TRUE,_variant_t("(local)"),_variant_t("sa"),_variant_t(""));
}  
catch(_com_error e)
......可是,怎么也启动不了,请问这是作甚????

解决方案 »

  1.   

    没有,前面的 AfxOleInit() 也加了,调试时,发现连 CreateInstance 都通不过,真是不理解。
      

  2.   

    忘了说了,我的以上语句是写在 DllMain 函数中的,如果是拿出来放在另一个函数中就可以执行,但是放在 DllMain 中就不行,连 CreateInstance 都不能执行,真是不能理解,难道是在 DllMain 中不能产生任何对象吗?
      

  3.   

    楼主你好像少了连接这步呀!而且创建方式好像有问题呀!
    这是我在DELPHI中的代码,运行没有问题,我想你应该可以看懂的。
    var oSqlServer:Variant;
       sOwnerName:String;
       i:integer;
    begin
     oSqlServer:=CreateOleObject('Sqldmo.sqlServer');
     oSqlServer.Connect(Edit1.text,edit2.text,edit3.text);
     for i:=1 to oSqlserver.databases.count do
     begin
      listbox1.Items.Add('-------------');
      listbox1.items.Add('名称:'+oSqlServer.databases.Item(i).name);
      listbox1.items.Add('大小:'+Inttostr(oSqlServer.databases.Item(i).size));
     end;
      Memo1.Lines.Add('----------');
      //memo1.lines.Add(oSqlServer.databases.item('carManage').Owner);
      oSqlServer:=null;
    end;
      

  4.   

    To Title:   在 VB 和 Delphi 中的确是如此,在 VC 中若不是 Dll 也可以,但是若是
    放在 DllMain 函数中就不行了,而且连 AfxOleInit 放在其中执行后好象也
    没有用,在其他地方调用 COM 前也一样还是要调用一次 AfxOleInit(), 真是
    很不理解。?????
      

  5.   

    你在DllMain的哪个地方AfxOleInit()?
    最好还是在dwReason == DLL_PROCESS_ATTACH的AfxInitExtensionModule之后加上::CoInitialize(or CoInitializeEx)而在DLL_PROCESS_DETACH的时候::CoUninitialize afxoleinit有一些资源问题可能DLLMAIN还没有分配