2009-08-13 4 views
1

私はすでにこの問題を解決するために一日中過ごしましたが、まだ運はありません。私のプロジェクトでは、私はリットルのプロパティページでをATLとコードにマルチスレッド(/ MT)ランタイムライブラリプロパティを設定するには、静的リンクにATL財産の使用を設定します生成プロパティページ(C/C++フォルダ)。しかし、DependencyWalkerは依然としてAtl71.dllの依存関係を示しています。ATLへの静的リンクが選択されていても、Atl71.dllのdenpendencyがまだ存在します

私はGoogleで検索して atlbase.h右 atlwin.h を追加するの溶液で、このページhttp://www.eggheadcafe.com/forumarchives/vcatl/Mar2006/post26077463.aspを見つけました。このソリューションは、atl71.dllへの依存を減らすのに役立ちました。ただし、CreateWindowが正常に動作しないという新しい問題が発生します。

// Creates the Web Browser control and navigates to the 
    // specified web page. 
    HWND hWnd = ::CreateWindow("AtlAxWin", "http://www.microsoft.com", 
    WS_CHILD|WS_VISIBLE, 10, 10, 500, 300, hParent, NULL, 
    ::GetModuleHandle(NULL), NULL); 

hwndがNULLです。

したがって、atlwin.hを追加するソリューションは使用できません。以前は同様の静的リンクの問題を抱えていたのでしょうか?それを解決するには?

環境:VS 2003の.Net

ありがとう!

答えて

0

のVisual Studio 6からのアップグレード時に私の場合、それはこのように見えたので、私は、修正プログラムはウィンドウクラス名にバージョン番号を含めることだった2005年に同様の問題が見つかりました:付きだから

hwndControl = ::CreateWindow("AtlAxWin80", ...); 

Visual Studio 2003の場合、次のようになります。

hwndControl = ::CreateWindow("AtlAxWin71", ...); 

作品。

(はるかに基本的なレベルでは、あなたがAtlAxWinInit()を呼び出している?)ところで

+0

私はそれを変更: の#define ATLAXWIN_CLASS "AtlAxWin71"(DEF atldef.h中) HWND = ::のcreateWindow(_T(ATLAXWIN_CLASS)、...); 問題は解決していません。 GetLastErrorの結果は0(ERROR_SUCCESS)です。何か案が? – bionicoder

+0

@bionicoder:Yow。申し訳ありませんが、手がかりではありません。 – RichieHindle

0

:それは「マルチスレッド(/ MT)」を削除し、そうですが - 冗長で、このオプションは、ATL実行時ではなく、することに関するものです。

HWNDがのcreateWindowコールする代わりに、AtlAxCreateControlある

LPVOID lpMsgBuf; 
FormatMessage( 
    FORMAT_MESSAGE_ALLOCATE_BUFFER | 
    FORMAT_MESSAGE_FROM_SYSTEM | 
    FORMAT_MESSAGE_IGNORE_INSERTS, 
    NULL, 
    GetLastError(), 
    0, // Default language 
    (LPTSTR) &lpMsgBuf, 
    0, 
    NULL 
); 

// Display the string. 
MessageBox(NULL, (LPCTSTR)lpMsgBuf, LError, MB_OK | MB_ICONINFORMATION); 
// Free the buffer. 
LocalFree(lpMsgBuf); 
+0

GetLastError()の戻り値は0 = ERROR_SUCCESSです。だからCreateWindowは成功です。しかし、hwnd = 0x00000000 – bionicoder

+0

の場合は、ウィンドウprocをチェックして、WM_CREATE、WM_NCCREATEなどの間に何か不具合が起きていないことを確認してください。必要なときにDefWindowProcに渡されないようにしてください。 –

+0

申し訳ありませんが、CreateWIndowの実行後に出力にエラーがあります。私はちょうどそれを見つけた。ここにあります: DlgStatic.exeの0x004a6ebcの最初の例外:0xC0000005:0x00000000の場所を読み取るアクセス違反。 'microsoft.com'のコントロールの作成に失敗しましたエラーコード:0x8007000e - この操作を完了するのに十分な記憶域がありません。 このエラーは、atlwin.hの追加後に発生します。それがなければ、ATL71.DLLの問題を除いてOKです – bionicoder

0

NULLである理由を発見するために(MSDNのサンプルから)次のコードを追加してください。しかし、私が知っている限り、これを使用すればatl71.dllへの依存関係は依然として生じます。

ウェブブラウザをホストし、atl71.dllに依存できない場合は、おそらく自分でグルーコードを書く必要があります。基本的なホスティングはそれほど難しくありません。これはあなたがこれに費やした日数よりも少なくてすみます。あなたはまた、より多くのコントロールを持っています。ここで

はサンプルです:http://support.microsoft.com/default.aspx/kb/196339/en-us

あなただけの小さな本のサブセット、CWBExplorerBarで主にロジック:: SetSiteプラスOLEインターフェイスのサブセットを実装する必要がある、あなたがその機能を必要とするまで、E_NOTIMPLを返すことができますほとんどが。