- ベストアンサー
WNetAddConnection2で困っています
お世話になります。 VC6.0のサービス内でのネットワーク接続関数:WNetAddConnection2で困っています。 パラメータ NETRESOURCE nr;の // ローカルドライブ名 nr.lpLocalName = ""; // 共有フォルダ名 nr.lpRemoteName = "\\\\saver\\c$"; がエラーになります 「2 番目の引数を 'char [6]' から 'const unsigned short *' に変換できません。 (新しい機能 ; ヘルプを参照)指示された型は関連がありません; 変換にはreinterpret_cast、 C スタイル キャストまたは関数スタイルのキャストが必要です。」 (unsign short *)のセット方法は下記のように直したのですが // 資源の種類 nr.dwType = RESOURCETYPE_DISK; // ローカルドライブ名 nr.lpLocalName = (unsigned short*)""; // 共有フォルダ名 nr.lpRemoteName = (unsigned short*)"\\\\saver\\c$"; // プロバイダー名 nr.lpProvider = NULL; ・・・ dwret = WNetAddConnection2( &nr,(const unsigned short *)"passdw",(const unsigned short *)"userid",0); コンパイルはとおったのですが 接続できません (unsign short *)のセット方法が悪いのか サービスでなければうまく動くのですが・・・。 サービスなのでデバックもよくできません アドバイス、回答、お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
nr.lpLocalName = L""; nr.lpRemoteName = L"\\\\saver\\c$"; nr.lpProvider = NULL; dwret = WNetAddConnection2( &nr,L"passdw",L"userid",0); では? ASCII(char*)型にするなら 方法1 #define UNICODE #define _UNICODE を検索してコメントにする。 方法2 NETRESOURCEA構造体と WNetAddConnection2A関数を使う
その他の回答 (2)
- a-kuma
- ベストアンサー率50% (1122/2211)
Windows 系はあまりプログラムを組まないので良く分かりませんが、Unicode を 使っているから、じゃないですか? > nr.lpRemoteName = "\\\\saver\\c$"; nr.lpRemoteName = _T("\\\\saver\\c$"); って感じではいかが? ちなみに、「型が違うよ」と言っているエラーに対して、理由も分からずキャスト をしても問題の解決になることは、ほとんどありませんよ。
お礼
回答ありがとうございます。
- takebe
- ベストアンサー率65% (17/26)
# あてずっぽうですが... サービスというのはNTとかWindows2000のサービスのことでしょうか. サービスを動かすアカウントの権限と普通のコマンドを動かすアカウントの権限が違っているため,接続ができないのかもしれません. サービスを動かすアカウントをコマンドを動かしているアカウントに変更してみたらうまく動いたりしませんかね.
お礼
早々の回答ありがとうございました。
お礼
回答、ありがとうございます。