• ベストアンサー

VBやC#のDLLを作るとき

VBやC#のDLLを作るとき特別な作り方があるのでしょうか? 少し前にポインタで文字列ももってき方を教えていただいたのですが、VBやC#に持っていけません C++で特別な作り方があるでしょうか? それともVBやC#で特別な引き込み方があるのでしょうか? 特に文字の場合ポインタがないVBに持っていくとき どういう型で返せばいいのでしょうか? よろしくお願いいたします

  • gotyan
  • お礼率91% (172/188)

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

  • ベストアンサー
  • onti
  • ベストアンサー率37% (9/24)
回答No.2

VC#では、ポインタの考え方が基本的はありません。 ポインタをどうしても使用しなくてはいけないのであれば それなりのポインタ型を使用するための宣言などが必要 にあります。 ポインタを使用しなくてもよいのであれば、文字列などの 受け渡しはstring型で引数を作成すればよいと思います。 受け渡す引数をI/O型にするのであれば、ref string型に すれば、OKです。 ちなみに、DLLをつくるのに特別な作り方はありません。 Visual Studioを使用しているのであれば、クラスライブラリ のプロジェクトを作成してDLLを生成すればできると思います。 VC#でポインタ型を使うのは結構手間がかかると思いますよ。

gotyan
質問者

お礼

そですか。。。 今、VB、C#をだいたい覚え(使いこなせてはいないですが) VC++でDLLに挑戦しているところですが。。。 なかなかうまくいきません かといってVC++で全部 作るのはつらそうですし。。。 DLLの型さえ一定ならはあとは引き込むことを がんばって考えればいいんですね ありがとうございました。

その他の回答 (1)

  • furyfox
  • ベストアンサー率56% (58/103)
回答No.1

DLLファイルでも3種類ぐらいあって ACTIVEX DLLと 使用時に.h や.libが必要なDLLと 必要でないDLLがあります。 一般的なDLLは3番目のものだと思います。 文字列やポインタを使った関数でもDLLで使用できます。 vb側は内部ではunicodeですが文字列をDLLに送るときsjisに変換されたテーブル を自動的に用意します。 またポインタに関してはVB側から参照渡しすればポインタになります。 VBは文字列をDLLに送る場合byvalで渡さないといけないところに注意が必要です。 ちなみにVB6.0←→VC6.0++ の話ですのでC#などのネットフレームワークスではどうなるか わかりません。

gotyan
質問者

お礼

ありがとうございます。 参照渡しにすればいいんですね がんばってみます。

関連するQ&A

  • VBからCで作成されたDLLへの引数の渡し方

    VBからCで作成されたAPI関数への引数の渡し方がわかりません。 C側の引数のデータ型はchar型でポインタ渡しではありません。 ------------------------------------------------ C側 int KANSU(char Mode) VB側 Public Declare Function KANSU Lib "USERAPI.dll" ( ByVal CHAR As Byte) As Long ------------------------------------------------ C側がポインタ渡しの場合は、VB側はSTRING型で別に悩むことはなかったのですが、文字列渡しの場合は、VB側はBYTE型で渡す必要があり、その方法がわかりません。 どなたか、分かる方よろしくお願いします。 ちなみに、VB6.0です。

  • C#で、C言語で作ったdllに文字列の参照渡し

    Cで int test(char* moji) {   moji = "test";   return 0; } のようなdllを作り、C#側から   test(ref cs_moji); としても変数cs_mojiに"test"という文字列は帰ってきませんでした。 数時間調べたりしてcs_mojiの型をstringやStringBuilder等としたのですが、どれもうまくいきませんでした。 ポインタのポインタを利用したときは文字列は帰ってきたものの文字化けがたくさんしていて理想とはかけ離れていました。 どのようにしたらCのdllからC#に文字列を送ることができるでしょうか。 初歩的な質問かもしれないですがよろしくお願いいたします。

  • VBのBooleanはCではどんな方でしょうか? DLL

    元々、VB6のソースをCに書き直している最中ですが、 VBでintegerは Cではshortでよいのですが、VBでBooleanはCではどのように記述したらよいのでしょうか? 確かCは真が-1で偽が0だったと思いますが、それならば shortで定義して・・・ でうまくいくのでしょうか? VBから呼び出すCの関数のDLLを書いた事のある方、教えていただけますか? また、今の時代、DLLは古いでしょうか? だいぶ前のソースをいじくっております。

  • Cで自作したDLLをへC#から文字配列を渡したい

    CでDLLを自作したのですが、その引数にchar**型があるのですが、C#から使用するときにどの型の変数を渡せばいいのかわかりません。 色々と調べていくつか同じような事例があったのですが、うまくいきません。 Cで作ったDLLは __declspec(dllexport) int DetectComPorts(LPWORD ComPortTable, int ComPortMax, char **ComPortDesc) です。この中で「char **ComPortDesc」が問題です。 Cで書いたプログラムからはこのDLLが使用できることを確認しています。 Cの場合はchar**型の適当な変数を作ってmallocでメモリ確保してこの関数に渡して実行するとちゃんとアドレスに目的の文字列が格納されて帰ってきます。 よろしくお願いします

  • dllを使用しVB側に文字列を返す2

    No.280310の質問の続きになってしまいますが 「VCで作ったdllを使用し VBに文字列を返すことはできますか」 でVCで作ったdllをVBを呼び出す事ができるようになりました。 Declare宣言で疑問に思ったのですが Declare Function TxtCnt Lib "hoge.dll" (ByVal a As String) As Long aはなぜ値渡しなのでしょうか? 変数が書き換えられて戻ってくるので、byrefで指定していました。 それが問題が起こしていた原因一つでした。 ちなみにint型の数値をポインタで渡した場合はbyrefでうまくいきます。 ご教授願います。

  • Cで作成したDLL関数をVBから呼ぶ(.NET)

    以前の質問に「Cで作成したDLL関数をVBから呼ぶ」(QNo.1703839)がありますが、下記のコードを見るとVB6での内容だと思います。 Dim keydata As String * 128 keydata = String$(128, Chr(0) & Chr(0)) VB.NETでVC++のDLLで変更した文字列を受けたいのですが、 どのようにすればよいのでしょうか? VB.NET2003 <DllImport("DllTest.dll")> Private Shared Function _ Test(ByVal s1 As String) As String End Function Private Sub btnTest_Click(...) ... Dim s1 As String = "abc" Dim s2 As String Dim s3 As String s2 = Test(s1) MessageBox.Show(s2) ' "1"が表示される s3 = StrConv(s2, VbStrConv.None) MessageBox.Show(s3) ' 同じく"1"が表示 end sub VC++のDLL extern "C" __declspec (dllexport) BSTR __stdcall Test(char* s1) { AfxMessageBox(s1); // "abc"が表示される OK strcpy(s1, "123"); CString s2; s2 = "123"; return s2.AllocSysString(); } また、文字列に全角を含めても大丈夫でしょうか? Unicodeの変換処理を行う必要があるのでしょうか? よろしくお願いします。

  • DLLで格納された値をVBに渡す方法

    <VC++で作成したDLLをVBで呼ぶ処理> VBから変数をDLLに渡して値を格納してVBで受け取りたいのですが、 文字列が格納されている先頭アドレスをVBに渡したい場合の 方法を具体的に教えてください。 構造体を使用する方法はできたのですが、使わない方法(引数が変数)を 教えてください。 よろしくお願いします。

  • C++からC#のdllを参照する際、引数内に構造体があった場合の処理

    いつもお世話になっております。 http://satoshi.web5.jp/memo/connect_dll.htm VC++2008のMFCプロジェクトにて、C#のdllの関数を扱いたく、 上記サイトを参考に実装してみました。 上記サイトでも挙げているように、C#dll内の関数の引数が、 整数・文字列の場合は、うまく動作するのですが、 引数に構造体を渡し、dllにて構造体のデータを設定してやる関数にて、 引数の構造体ポインタを、どのように渡してやれば良いのかが 分かりません。 具体的には、 VARIANTARGの配列をnewし(変数pVarg)、 pVargに型と変数をセットして、Invoke関数に渡しますが、 その際の、pVargにセットしてやる型が分かりません。 このような場合は、どうすれば良いのでしょう? よろしくお願いします。

  • VB(6.0)で作成したDLLをVB(.Net)で呼び出す方法

    VB(6.0)で作成したDLLをVB(.Net)で呼び出すのに Public Declare Function 関数名 Lib "~.dllのパス"               (ByVal ・・・) As 型 このように呼び出してみているのですが 上手くいきません。整数データの変更も しました。 このDLLを呼び出せないと次に進めないので 本当に困っています。 よろしくお願いします。

  • VBから参照できないCのDLLを使用する方法

    Cで作成されたDLLがあるのですが、VBから参照設定しても「指定されたファイルへの参照は登録できません。」と怒られます。 そのようなDLLをどうしてもVBから使用したい場合はどうすれば良いでしょうか? 直接は無理だとしても、間に何かをかましてできると思うのですが、良い方法があれば教えてください。 ちなみに VB6 です。 よろしくお願いします。

専門家に質問してみよう