Export funkcji z C# - nie znaleziono punktu wejścia

0

Chciałbym zaimportować funkcję napisaną w C# do programu w lazarusie, wybrałem pattern wrappera w C++/CLI.

C#:

namespace TestLib
{
    public static class Functions
    {
        public static int Test(int x)
        {
            return x;
        }
    }
}

C++/CLI:
TestLibWrapper.h:

#pragma once
#using "TestLib.dll"

using namespace System;

__declspec(dllexport) int Test(int x);

TestLibWrapper.cpp:

#include "stdafx.h"
#include "TestLibWrapper.h"

int Test(int x)
{
	return TestLib::Functions::Test(x);
}

Lazarus:

function Test(x: Integer) : Integer; stdcall; external 'TestLibWrapper.dll'; 

Wszystkie programy się budują: problem występuje natychmiast po włączeniu aplikacji w lazarusie z komunikatem błedu "Nie znaleziono punktu wejścia procedury Test w bibliotece (...)\test1.exe."
W katalogu z kodem pascala wrzuciłem na wszelki wypadek obydwie DLLe: TestLib i TestLibWrapper.
Słyszałem że delphi jest tylko 32-bitowe, ale kompilacja w x86 powodowała błąd "Nieprawidłowe uruchomienie pliku wykonwywalnego", po zmianie na target bibliotek na x64 otrzymałem opisany wyżej rezultat, widocznie w lazarusie działa to inaczej.
Zna ktoś rozwiązanie tego problemu?

1

Jeśli Twój program jest 32-bitowy to raczej nie może korzystać z biblioteki 64-bitowej. Poza tym użyj konwencji cdecl:

function Test(x: Integer): Integer; cdecl; external 'TestLibWrapper.dll'; 
0

Rzeczywiście cdecl jest tutaj odpowiedni. Ale sednem problemu był brak atrybutu Extern "C" przy funkcji w "TestLibWrapper", nazwa funkcji była kompilowana do "int _cdecl Test(int)" bez tego. Sprawdziłem w opcjach projektu: lazarus potrafi robić 64-bitowe programy.

0

@FLAMESpl: oczywiście, że Lazarus (a dokładniej – FPC) wspiera tworzenie aplikacji zarówno 32-, jak i 64-bitowych. To samo Delphi, o ile korzysta się z jakiegoś współczesnego środowiska, a nie starocia sprzed 20 lat (wtedy platform 64-bitowych nie było, więc trudno żeby ich wparcie istniało).

1 użytkowników online, w tym zalogowanych: 0, gości: 1