-1

ケースは次のとおりです。

私は以下のようにfunction1を内部に持つdllを作成しました:

int function1( char *inVal, char *outVal)
{
....
strcpy(outVal,dn.commonname.c_str());
}

最後の行で、outValは文字列であるdn.commonnameを指しています。

このdllをLoadLibraryを使用して別のdllに正常にロードしました。2番目のdllには次のものがあります。

int function1(string inval, string &outVal)
{   
    typedef int (WINAPI *func1Ptr)(char *, char *);


        char outValPtr[128] = {0};
        int retVal = func1Lnk((char *)inVal.c_str(), outValPtr);
        string outVal = outValPtr;  
 }

ここで、コードに2番目のdllをロードし、fnuction1を呼び出していますが、関数の2番目の引数を確認すると、NULLが返されます。

誰かがこれに光を当てることができますか?

編集-1

コードを次のように変更しました。

int function1(string inVal, string &outVal)
{   
    typedef int (WINAPI *func1Ptr)(char *, char *);


        char outValPtr[128] = {0};
        int retVal = func1Lnk((char *)inVal.c_str(), outValPtr);
        outVal = outValPtr;  
 }

しかし、問題は解決しませんでした。どんな手掛かり?

4

1 に答える 1

3

引数をシャドウイングするローカル変数を宣言します。

string outVal = outValPtr;

名前のつづりが違うので、それは議論をほとんど覆い隠しています。という名前の変数は、という名前の変数とoutVal同じ変数ではありませんoutval。C++の名前は大文字と小文字が異なります。

于 2013-03-05T07:19:46.763 に答える