プロが教えるわが家の防犯対策術!

お世話になります
たびたび申し訳ないですが

C#でDLLとリンクするプログラムを作成してます。
その時に、DLLの関数へポインタを渡すんですが
おそらくその時に、アクセス違反が起きてます。

以下ソースです。
引数として渡されるStringには数字が入ってます。

unsafe public short import(String s)
{
short ret = 999;
short no;
uint brate;
char bit = '8';
char Parity = 'N';

no = short.Parse(s);
brate = uint.Parse("9600");

// 問題の箇所
ret = dllImport(no, brate, &bit, &Parity);

return ret;
}

これは私の予想なのですが
上記で宣言した char bit、 char Parity がpublicではないので
DLL内で参照するときに、エラーが出てしまうのではないかと考えて
char bit、 char Parity をどうにかpublicにできないか試したのですが
調べてもどうも方法がわからず、相談させていただきました。

そもそもpublicにしたところで、エラーが出なくなるか不明ですし
根本の原因がわかりません。

少ない情報で大変恐縮ですが
お分かりになる方、ご教授お願い致します。

A 回答 (2件)

>dllImport


DllImportではないですか?
だとすると、使い方が全然違います。

第一、関数のエントリポイントは何処で
宣言したんですか?

因みに、DLLには変数の値かアドレスが
渡るので、変数自体がpublicかどうかは
関係がありません。呼び出し元が参照
できるものであれば何でもよいのです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます
やはりpublicは関係ないですか・・
もう少し調べてみます。
dllImportは関数の名前を私が書き換えたものです
DllImportについては掲載し忘れておりました。
ご迷惑おかけします

お礼日時:2012/12/04 09:19

C#でポインタを使ったことはないので解決策はわかりませんが(そもそもDLLの関数がどんなものかも書かれてないし)



>上記で宣言した char bit、 char Parity がpublicではないので
>DLL内で参照するときに、エラーが出てしまうのではないかと考えて
>char bit、 char Parity をどうにかpublicにできないか試したのですが
>調べてもどうも方法がわからず、相談させていただきました。

変数のbit,Parityがpublicでないことはまったく関係ないはずです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます
もう少し詳しく調べてみたいと思います

お礼日時:2012/12/04 09:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!