VB.NETからC++で作成したdllの連携

このQ&Aのポイント
  • VB2010からC++で作成したdllへ配列を渡す方法について教えてください
  • 単純な数値(int)を渡す場合は動作するサンプルコードがあるが、複雑な配列を渡す場合のサンプルがない
  • いくつかのサンプルを試したが動作しなかった
回答を見る
  • ベストアンサー

VB.NETからC++で作成したdllの連携

プログラム初心者です。 VB2010からC++で作成したdllへ配列を渡したいのですが、 動作するサンプルがありましたら教えてください。 単純な数値(int)であれば下記のページのサンプルコードをダウンロードして 動作可能でした。 http://www.geocities.jp/i_love_balard/myhome/vbdll.html しかし、以下のサンプルを作成したのですが、動作しませんでした。 http://www7.atwiki.jp/hisam/pages/51.html http://support.microsoft.com/kb/402577/ja http://support.microsoft.com/kb/410837/ja よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

なんか,サンプルを参照する場所を間違えているようにしか思えないのですが……。 MSKBはVB2用だったりVB5用だったりと,古い情報です。 挙げられたサイトの内,Visual Basic 2010対応の物は,atwikiのもののみです。 # 個人的にはIntPtr使ってやるのは面倒すぎると思う……。 で,サンプルですが,ちゃんとMSDNに記述があります。 MSDN: アンマネージ コードとの相互運用 http://msdn.microsoft.com/ja-jp/library/sd10k43k.aspx MSDN: さまざまな型の配列のマーシャリング http://msdn.microsoft.com/ja-jp/library/hk9wyw21.aspx

demioromen
質問者

お礼

>Visual Basic 2010対応の物は,atwikiのもののみです。 回答有難うございます。 そうだったんですね。マーシャリングについても調べたのですが、 どうも理解できないので、他の方法を調べていました。

その他の回答 (2)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

VB2/VB5などVB6以前ですと変数の規格が今の VB.NETなどとは異なるのでそのあたりも考慮しないといけません VB6以前は Integerは16ビット長 Longが32ビット長になります VB.NETでは Integerは32ビット長 Longが64ビット長になります また VC側では intもlongも 32ビット長になっています

demioromen
質問者

お礼

回答ありがとうございます。 とりあえずは配列連携の方は出来たのですが、 ちょうど型対応でへんな値が返って来ます。 参考にさせて頂きます。

  • t-tommy
  • ベストアンサー率14% (8/54)
回答No.1

なぜ、動作しなかったの歩が 疑問じゃね!

関連するQ&A

  • VB.NETからC++のdll連携(double)

    プログラミング初心者です。 VB2010からC++で作成したDLLの配列連携で困っています。 下記のサンプルで整数配列(integer)の連携を確認できました。 しかし、double型の連携が同サンプルでは正しい値が渡されません。 (プラットフォーム呼び出しサンプルの”整数 ByVal の配列”を使用しました。) プラットフォーム呼び出しサンプル http://msdn.microsoft.com/ja-jp/library/8bbftkst(v=VS.90).aspx double型の配列は同じ方法で可能なのでしょうか。 別の方法でないと動作しないのであれば、そちらも教えてください。 よろしくお願い致します。

  • VB2005 .NETでAccessのイベントをフックするDLLを作成したい

    Access2000 のフォームをマウスホイールでスクロールさせたいと考えています。 VBA を使用したときはできたのですが VBE に不具合があるため、DLL を作成することが推奨されています。 参考URL1) http://support.microsoft.com/kb/278379/ja に VB 6.0 で Accessのイベントをフックする方法が記述されているので、これを VB 2005 .NET で行いたいのです。 イベントをフックできたのですが、VBE を開いた状態で Access フォームをスクロールさせようとすると、 イベントが延々と繰り返し生じてしまいます。 これの解決方法をご教示いただきたいです。よろしくお願いいたします。 環境は以下の通りです。 VB 2005 .NET Express Access2000 具体的なソースは長くてここには乗せられないので以下のURLにアップしました。 http://irija-bari.hp.infoseek.co.jp/dll_for_access2000/

  • VS2010でC#のDLLを作成する手順

    Visual Studio 2010でVisual C#のコードのDLLを作成したいのですが 簡単なコード例で具体的な操作手順を教えていただけないでしょうか。 (Microsoft Visual Studio 2010、OS WindowXP) Visual C++でDLLを作成する手順については 「チュートリアル: ダイナミック リンク ライブラリの作成と使用 (C++)Visual Studio 2010 」 <http://msdn.microsoft.com/ja-jp/library/ms235636(v=vs.100).aspx> に詳しく手順が記載されていましたが、このVisual C#版が見たいのですが見当たりませんでした。 よろしくお願いします。

  • NET2005でDllが読み込めない

      質問に追記をしたいので新設してもう一度質問をしました。 プラットフォームはVS.NET2005でC++で記述しています。 OSはWindows XP SP3です。 自分で作成したDLLを読み込むためにLoadLibrary関数でDLLを読み込んだハズなんですがエラーになり、エラー値126で、指定したモジュールがありません と出ます。 たしかに指定したフォルダにDLLがあるはずなんですが。 DLLの方は実は.NET2003で作られたDLLです。 しかし2003でも2005でも関係なくDLLは読み込まないようです。 ただ、.NET2003からコンバートしたソリューションだと正常にdllファイルを読み込んでいます。 NET2005で新規作成でプロジェクトを作り、そこの.cppファイルからdllファイルを読み込ませようとすると失敗します。 一つ気になるのが、Microsoftのホームページの以下のアドレスでその事に関する対策が載っているようです http://support.microsoft.com/kb/891401/ja この問題を解決するには、最新バージョンの Windows スクリプト ホストを使用してコンピュータを更新します。これを行うには、次のマイクロソフト Web サイトを参照してください。 解決方法としてこのように載っていますが、リンク先がありません。 何かしらどこかにリンク先がないでしょうか? もしくはこの問題を解決できる方法はありませんか? 質問でもなんでもいいので解答ください。 m( )m どうかよろしくお願いいたします。

  • msdia80.dllが作成されてしまう件について

    msdia80.dllが作成されてしまう件について Vista x64 Homeを使用しています。 PCはVGN-FW93JSです。 最近、VAIOをリカバリする機会があってリカバリしました。 その際にHDDをCドライブとDドライブに分割(Cドライブ約130GB・Dドライブ約170GB)です。 リカバリ自体は正常に終了し、特に動作に問題はありませんでした。 ところがDドライブを開いてみると直下フォルダに「msdia80.dll」という名前のファイルが作成されていました。 気にはなったのですが、動作に問題が無かったのでそのまま放置していました。 普段、外付けのUSBポータブルHDDをつけっ放しにして使用しているのですが、ある日気が付くと外付けHDDにも「msdia80.dll」というファイルができていて、取り外しができなくなってしまいました。 http://support.microsoft.com/kb/927665/ja ↑を見るとx64のOSにVisual C++ 2005 の再頒布可能パッケージというものをインストールすると作成されてしまうファイルのようですが、自動的に最大容量のドライブのルートディレクトリに作られてしまうのでしょうか? またMicrosoft Visual C++ 2005 SP1 再頒布可能パッケージ (x64)をダウンロードしてインストールすると問題が解決するとありますが、インストールしてみても「msdia80.dll」自体は残ったままですし、: \Program Files\Common Files\Microsoft Shared\VCというフォルダもありません。 どのように解決するのがいいのでしょうか?

  • VB6起動ディスクでインストールするとエラー

    VB6で開発したsoftのセットアップファイルを作成しwindsows2000にインストールしようとしたら下記メッセージがでました。 エラー メッセージ "システム ファイルが最新ではない" サポートオンラインで調べると対策はのっていますが (http://support.microsoft.com/default.aspx?scid=kb;ja;191096 ) 今度は the language vb6jp.dll could not be found がでてインストールできません。 これはどのように回避したらいいでしょうか。

  • RICHED32.DLL を読み込めませんでした って感じになってこまってます。

    メールを作成、返信しようとすると「「RICHED32.DLL を読み込めませんでした。再インストールしてください」 という警告がでます。 自分なりにマイクロソフトのホームページへいき、いろいろな質問例、回答例と見て、全く同じ問題の回答例があったので、それを読んで、そのとおりにしても、RICHED32.DLL というファイルがどうしても見つかりません。 参考にしたページ http://www.microsoft.com/japan/support/kb/articles/J044/0/20.htm   仕事関係ではやくメールを作成できるようにしないといけないので誰か助けてください。 おねがいします。

  • C++/CLIで作ったDLLが読み込めない。

    現在、Visual Studio 2010を使い、 C++/CLIで作ったDLLを、C#から呼び出すプログラムを作成しております。 Visual Studioのデバッグでは、正常に動作するのですが、 IISに設定してブラウザから確認しようとすると、 「ファイルまたはアセンブリ 'wrap.dll'、またはその依存関係の 1 つが読み込めませんでした。指定されたモジュールが見つかりません。」 というエラーが出てしまいました。 下記のサイトなどを参考に、 「ソリューションを1つにして参照設定する」、 「Releaseモードにする」などと実施してみましたが、 解決するには至っておりません。 http://social.msdn.microsoft.com/Forums/ja-JP/vcgeneralja/thread/23fd794a-7d8a-4153-9e1e-0358c38a84eb この原因と対処法に関して、ご助言頂きたいと思います。 宜しくお願いします。

  • dllファイルの作成手順

    今回初めてVisualStudio C++ にて作業しています。 初歩的な事を聞いてしまっているかもしれませんが、宜しくお願いします。 【環境】 WinXP SP3,VisualStudio2008 【目的】 InstallShield2009にて、カスタムアクションであるプロセスが 起動されているか否か(ロックファイル有無)の判定をしたいのです。 InstallShieldのサポートより指南頂いた回答は、 PSAPI.dll に含まれる PSAPI ライブラリを使用する方法でした。 【行った操作】 http://support.microsoft.com/kb/175030/ja http://www.networld.co.jp/is/pdf/tips/tips5.pdf まずは新アクションの追加を試みようと、下段リンク先にあります 手順に従いC++テンプレートでのCustomActionの作成をしました。 VisualStudio2008を起動し、 新しいプロジェクト>Visual C++>空のプロジェクト と選択。 C:\CustomActionにプロジェクト「CustomAction」を新規作成。 プロジェクト(P)>CustomActionのプロパティ>Release>リンカ 「$(OutDir)\$(ProjectName).exe」を 「$(OutDir)\$(ProjectName).dll」に書き換える。 ソースファイルからCustomAction.cppとCustomAction.defを新規作成。 CustomAction.cppとCustomAction.defは、 リンク先URLのサンプルコードと同じものです。 ビルドによってできたdllを用いて、URL先資料2/5ページ以降の 手順書通りにmslを作成するも、出来上がったmsiは 実行後即、異常終了するものでした。 何処かに手順ミスがあるのは間違いないのですが、 InstallShieldの操作の方は何度も見直していますので ミスがあるとしたらdllの作成で何処か間違えがあるのではと思い、質問いたします。 InstallShieldと言う、公になっているノウハウの少ないツールがらみではありますが、宜しくお願いします。

  • CountIf関数の様な使われ方のIF関数

    http://support.microsoft.com/kb/214142/ja 上記URLのページで紹介されている関数の中で、 IF関数が表している内容は『配列数式』なのでしょうか?

専門家に質問してみよう