0

デバッグ プロジェクトのビルドで奇妙な問題が発生しました。ウェブを検索しましたが、残念ながらまだ手がかりは見つかりませんでした。

コンソール アプリケーション プロジェクトに dll を読み込もうとしています。私のdllにはいくつかの関数があり、FUNC1を呼び出して、この関数が正しく機能するかどうかを確認したいだけです.

私のdlでのFUNC1の宣言は次のとおりです。

int FUNC1 (char *inVal, int *retVal)

コンソール アプリケーションに dll を正常にロードし、以下のように関数ポインターを使用して FUNC1 を呼び出します。

int main()
{

HINSTANCE testInstance;

testInstance = LoadLibrary("Path\\to\\my.dll");


typedef int (WINAPI *FUNC1Ptr)(char *inVal, int *retVal);

if(testInstance == NULL)
{
    printf("The dll is not loaded, Please check the path!\n");
}
else 
{

    printf("The dll is loaded successfully!!");
}

FUNC1Ptr FUNC1Lnk = (FUNC1Ptr)GetProcAddress(testInstance,"FUNC1");

if (!FUNC1tLnk)
{
    FreeLibrary(testInstance);
    printf("Error in getting function address!!\n");
}
else
{

    int *ret = 0;
    char *PIN = NULL;
    PIN = "test";

    int retVal1 = FUNC1Lnk( PIN, ret );

}
return 0;
}

PS。違反は、次の free.c ファイルで参照されます。

        retval = HeapFree(_crtheap, 0, pBlock);
    if (retval == 0)
    {
        errno = _get_errno_from_oserr(GetLastError());
    }

}

4

1 に答える 1

1

FUNC1ポインタの使い方は?int *渡されたものがnullであることを好まないかもしれません。

これを試してください(ポインタではなく実際の整数型を持ち、そのアドレスを取得します):

int ret = 0;
char *PIN = NULL;
PIN = "test";

int retVal1 = FUNC1Lnk( PIN, &ret );
于 2013-02-09T12:08:19.610 に答える