2011-10-17 9 views
7

que tiene Delphi 2010 construyó DLL con dos métodos:llamada Delphi DLL de C++ CLI con muchos parámetros

function Foo1(a, b: Integer):PChar; export; stdcall; 
function Foo2(a, b, c:Integer):PChar; export; stdcall; 

exports Foo1, Foo2; 

Cada uno de ellos devuelva Result := PChar('Test').

Mi C++ \ CLI código

en la cabecera

typedef const wchar_t* (*pFUNC1)(int a, int b); 
pFUNC1 TestFoo1; 

typedef const wchar_t* (*pFUNC2)(int a, int b, int c); 
pFUNC2 TestFoo2; 

Inicializar por LoadLibrary y GetProcAddress funciones. Uso: TestFoo1(0,0) y TestFoo2(0,0,0);

Ambos funcionan en modo de lanzamiento.
Pero en el modo de depuración Foo2 está siendo abortado.

Por favor, indique lo que está mal.

Respuesta

4

Lo más probable es que no coincida con la convención de llamadas. Cambie el stdcall en Delphi al cdecl para que coincida con su código C++/CLI.

Como un aparte, tendrá que tener cuidado con la duración de sus cadenas si alguna vez intenta devolver un valor de la DLL que no es un literal almacenado en la memoria de solo lectura en el segmento de datos. Pero ese no es el problema aquí porque PChar('Test') tiene la misma duración que la DLL.

+0

bingo! funciona. Uso StrAlloc, StrPCopy, StrDispose para el uso de la memoria. – RredCat

Cuestiones relacionadas