I want to create a .NET assembly that can be accessed from unmanaged code (Delphi 5).
I have found Unmanaged Exports and followed the steps there but I am unable to successfuly compile even the basic example:
using RGiesecke.DllExport;
namespace DelphiNET
{
public class Class1
{
[DllExport("add")]
public static int Add(int left, int right)
{
return left + right;
}
}
}
DelphiNET.csproj
project file:
...
<ItemGroup>
<Compile Include="Class1.cs" />
<Compile Include="DllExportDllExportAttribute.cs" />
<Compile Include="PropertiesAssemblyInfo.cs" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)Microsoft.CSharp.targets" />
<Import Project="DllExportRGiesecke.DllExport.targets" />
...
Here is the error:
------ Build started: Project: DelphiNET, Configuration: Release Any CPU ------
c:WINDOWSMicrosoft.NETFrameworkv3.5Csc.exe /noconfig /nowarn:1701,1702 /errorreport:prompt /warn:4 /define:TRACE /debug:pdbonly /filealign:512 /optimize+ /out:objReleaseDelphiNET.dll /target:library Class1.cs DllExportDllExportAttribute.cs PropertiesAssemblyInfo.cs
Compile complete -- 0 errors, 0 warnings
DelphiNET -> C:DelphiNETinReleaseDelphiNET.dll
ILDasm: calling 'C:Program FilesMicrosoft SDKsWindowsv6.0ABinildasm.exe' with /quoteallnames /nobar "/out:C:Documents and SettingsLukasLocal SettingsTempmp29FDelphiNET.il" "C:DelphiNETinReleaseDelphiNET.dll"
C:DelphiNETinReleaseDelphiNET.dll : warning EXP0009: Platform is AnyCpu, generating creating binaries for each CPU platform in a separate folder...
ILAsm: calling 'c:WINDOWSMicrosoft.NETFrameworkv2.0.50727ILAsm.exe' with /nologo "/out:C:DelphiNETinReleasex86DelphiNET.dll" "C:Documents and SettingsLukasLocal SettingsTempmp29FDelphiNET.x86.il" /DLL "/resource=C:Documents and SettingsLukasLocal SettingsTempmp29FDelphiNET.res" /optimize
C:DelphiNETDllExportRGiesecke.DllExport.targets(8,5): error :
C:DelphiNETDllExportRGiesecke.DllExport.targets(8,5): error : Assembling 'C:Documents and SettingsLukasLocal SettingsTempmp29FDelphiNET.x86.il' to DLL --> 'C:DelphiNETinReleasex86DelphiNET.dll'
C:DelphiNETDllExportRGiesecke.DllExport.targets(8,5): error : Source file is ANSI
C:DelphiNETDllExportRGiesecke.DllExport.targets(8,5): error :
C:DelphiNETDllExportRGiesecke.DllExport.targets(8,5): error : Assembled method RGiesecke.DllExport.DllExportAttribute::.ctor
C:DelphiNETDllExportRGiesecke.DllExport.targets(8,5): error : Assembled method RGiesecke.DllExport.DllExportAttribute::.ctor
C:DelphiNETDllExportRGiesecke.DllExport.targets(8,5): error : Assembled method RGiesecke.DllExport.DllExportAttribute::.ctor
C:DelphiNETDllExportRGiesecke.DllExport.targets(8,5): error : Assembled method RGiesecke.DllExport.DllExportAttribute::get_CallingConvention
C:DelphiNETDllExportRGiesecke.DllExport.targets(8,5): error : Assembled method RGiesecke.DllExport.DllExportAttribute::set_CallingConvention
C:DelphiNETDllExportRGiesecke.DllExport.targets(8,5): error : Assembled method RGiesecke.DllExport.DllExportAttribute::get_ExportName
C:DelphiNETDllExportRGiesecke.DllExport.targets(8,5): error : Assembled method RGiesecke.DllExport.DllExportAttribute::set_ExportName
C:DelphiNETDllExportRGiesecke.DllExport.targets(8,5): error :
C:DelphiNETDllExportRGiesecke.DllExport.targets(8,5): error : ***** FAILURE *****
C:DelphiNETDllExportRGiesecke.DllExport.targets(8,5): error :
Done building project "DelphiNET.csproj" -- FAILED.
========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped ==========
OS: WinXPSP3, Microsoft Visual C# 2008 Express Edition with SP1, .NET 3.5 SP1
Any idea what's wrong? Thanks.
Edit 23:40:
I have found the bug. It is in the name of the function - add and Add are too same. When you change one of them, it works.
See Question&Answers more detail:os