C# вызов функции из Dll валится с эксепшеном
От: RinatY  
Дата: 05.12.06 12:56
Оценка:
на сях есть следующая фукция:

__declspec(dllexport) char* __cdecl GetBidList(char* secname, char* boardname)
{
    char* Bids = new char[1000];
    Bids[0] = '\0';
    return Bids;
}


ее мы пытаемся грузить из C#

    [DllImport("Matching.dll", EntryPoint = "GetBidList")]
    public static extern string GetBidList( string secname, string secboard );


потом пробуем ее вызывать 6 раз подрят

BidsDATA = MatchingTool.GetBidList( this.Params.SecName, (string)Boards[i] );
BidsDATA = MatchingTool.GetBidList( this.Params.SecName, (string)Boards[i] );
BidsDATA = MatchingTool.GetBidList( this.Params.SecName, (string)Boards[i] );
BidsDATA = MatchingTool.GetBidList( this.Params.SecName, (string)Boards[i] );
BidsDATA = MatchingTool.GetBidList( this.Params.SecName, (string)Boards[i] );
BidsDATA = MatchingTool.GetBidList( this.Params.SecName, (string)Boards[i] );


Если запускать на windows 2000, то первые 5 он нормально работает, а на 6-й падает с экспешеном про NullReference.

А если запускать на машинке с windows xp, то все работает.

Опытным путем установил, что если дллку заменить на следующую:
__declspec(dllexport) char* __cdecl GetBidList(char* secname, char* boardname)
{
    char* Bids = new char[1000];
    Bids[0] = '\0';
    return NULL;
}

то все работает

и если сделать следующую дллку
char Test[1000];
__declspec(dllexport) char* __cdecl GetBidList(char* secname, char* boardname)
{
    char* Bids = new char[1000];
    Test[0] = '\0';
    return Test;
}

то тоже все работает
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.