Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Source/ExcelDna.Integration/ComInterop/DummyComAddIn.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,12 @@ public int GetTypeInfo(uint iTInfo, uint lcid, out nint ppTInfo)
throw new NotImplementedException();
}

public int GetIDsOfNames(Guid riid, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPWStr, SizeParamIndex = 2)] string[] rgszNames, uint cNames, uint lcid, [In][Out][MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] int[] rgDispId)
public int GetIDsOfNames(in Guid riid, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPWStr, SizeParamIndex = 2)] string[] rgszNames, uint cNames, uint lcid, [In][Out][MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] int[] rgDispId)
{
throw new NotImplementedException();
}

public int Invoke(int dispIdMember, Guid riid, uint lcid, INVOKEKIND wFlags, [MarshalUsing(typeof(Generator.Interfaces.DispParamsMarshaller))] in Generator.Interfaces.DispParams pDispParams, nint pVarResult, nint pExcepInfo, nint puArgErr)
public int Invoke(int dispIdMember, in Guid riid, uint lcid, ushort wFlags, [MarshalUsing(typeof(Generator.Interfaces.DispParamsMarshaller))] in Generator.Interfaces.DispParams pDispParams, nint pVarResult, nint pExcepInfo, nint puArgErr)
{
throw new NotImplementedException();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,14 @@ public int GetTypeInfo(uint iTInfo, uint lcid, out nint ppTInfo)
throw new NotImplementedException();
}

public int GetIDsOfNames(Guid riid, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPWStr, SizeParamIndex = 2)] string[] rgszNames, uint cNames, uint lcid, [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2), Out] int[] rgDispId)
public int GetIDsOfNames(in Guid riid, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPWStr, SizeParamIndex = 2)] string[] rgszNames, uint cNames, uint lcid, [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2), Out] int[] rgDispId)
{
dispatcher.GetIDsOfNames(rgszNames, rgDispId);

return 0;
}

public int Invoke(int dispIdMember, Guid riid, uint lcid, INVOKEKIND wFlags, [MarshalUsing(typeof(DispParamsMarshaller))] in DispParams pDispParams, nint pVarResult, nint pExcepInfo, nint puArgErr)
public int Invoke(int dispIdMember, in Guid riid, uint lcid, ushort wFlags, [MarshalUsing(typeof(DispParamsMarshaller))] in DispParams pDispParams, nint pVarResult, nint pExcepInfo, nint puArgErr)
{
dispatcher.Invoke(dispIdMember, pDispParams, pVarResult);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,15 @@ public int GetTypeInfo(uint iTInfo, uint lcid, out nint ppTInfo)
throw new NotImplementedException();
}

public int GetIDsOfNames(Guid riid, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPWStr, SizeParamIndex = 2)] string[] rgszNames, uint cNames, uint lcid, [In][Out][MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] int[] rgDispId)
public int GetIDsOfNames(in Guid riid, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPWStr, SizeParamIndex = 2)] string[] rgszNames, uint cNames, uint lcid, [In][Out][MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] int[] rgDispId)
{
for (int i = 0; i < cNames; ++i)
rgDispId[i] = (rgszNames[i] == "LoadImage") ? methods.Length : Array.FindIndex(methods, m => m?.Name == rgszNames[i]);

return 0;
}

public int Invoke(int dispIdMember, Guid riid, uint lcid, INVOKEKIND wFlags, [MarshalUsing(typeof(Generator.Interfaces.DispParamsMarshaller))] in Generator.Interfaces.DispParams pDispParams, nint pVarResult, nint pExcepInfo, nint puArgErr)
public int Invoke(int dispIdMember, in Guid riid, uint lcid, ushort wFlags, [MarshalUsing(typeof(Generator.Interfaces.DispParamsMarshaller))] in Generator.Interfaces.DispParams pDispParams, nint pVarResult, nint pExcepInfo, nint puArgErr)
{
try
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,18 @@ internal static class DispParamsMarshaller
{
public static unsafe DispParamsNative ConvertToUnmanaged(DispParams managed)
{
int* rgdispidNamedArgs = null;
if (managed.rgdispidNamedArgs != 0)
{
rgdispidNamedArgs = (int*)Marshal.AllocHGlobal(sizeof(int));
*rgdispidNamedArgs = managed.rgdispidNamedArgs;
}

return new DispParamsNative
{
cArgs = managed.cArgs,
cNamedArgs = managed.cNamedArgs,
rgdispidNamedArgs = managed.rgdispidNamedArgs != 0 ? &managed.rgdispidNamedArgs : null,
rgdispidNamedArgs = rgdispidNamedArgs,
rgvarg =
managed.rgvarg != null
? ArrayMarshaller.ArrayToPtr(managed.rgvarg.Reverse().Select(VariantMarshaller.ConvertToUnmanaged).ToArray())
Expand All @@ -39,6 +46,12 @@ public static unsafe DispParams ConvertToManaged(DispParamsNative unmanaged)
};
}

public static unsafe void Free(DispParamsNative unmanaged)
{
if (unmanaged.rgdispidNamedArgs != null)
Marshal.FreeHGlobal((nint)unmanaged.rgdispidNamedArgs);
}

public static void UpdateArg(DispParams dp, Variant v, int i)
{
int ri = dp.cArgs - 1 - i;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ private int[] GetDispIDs(string propName)

var dispIds = new int[names.Length];
var hr = dispatch!.GetIDsOfNames(
emptyGuid,
in emptyGuid,
names,
(uint)names.Length,
LOCALE_USER_DEFAULT,
Expand All @@ -126,9 +126,9 @@ private int[] GetDispIDs(string propName)

var hr = dispatch!.Invoke(
dispIds[0],
emptyGuid,
in emptyGuid,
LOCALE_USER_DEFAULT,
kind,
(ushort)kind,
dispParams,
variantResult.Ptr,
0,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ internal partial interface IDispatch

[PreserveSig]
int GetIDsOfNames(
Guid riid,
in Guid riid,
[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPWStr, SizeParamIndex = 2)] string[] rgszNames,
uint cNames,
uint lcid,
Expand All @@ -29,9 +29,9 @@ int GetIDsOfNames(
[PreserveSig]
int Invoke(
int dispIdMember,
Guid riid,
in Guid riid,
uint lcid,
INVOKEKIND wFlags,
ushort wFlags,
[MarshalUsing(typeof(DispParamsMarshaller))] in DispParams pDispParams,
nint pVarResult,
nint pExcepInfo,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,12 +69,12 @@ int IDispatch.GetTypeInfo(uint iTInfo, uint lcid, out nint ppTInfo)
throw new NotImplementedException();
}

int IDispatch.GetIDsOfNames(Guid riid, string[] rgszNames, uint cNames, uint lcid, int[] rgDispId)
int IDispatch.GetIDsOfNames(in Guid riid, string[] rgszNames, uint cNames, uint lcid, int[] rgDispId)
{
throw new NotImplementedException();
}

int IDispatch.Invoke(int dispIdMember, Guid riid, uint lcid, INVOKEKIND wFlags, in DispParams pDispParams, nint pVarResult, nint pExcepInfo, nint puArgErr)
int IDispatch.Invoke(int dispIdMember, in Guid riid, uint lcid, ushort wFlags, in DispParams pDispParams, nint pVarResult, nint pExcepInfo, nint puArgErr)
{
throw new NotImplementedException();
}
Expand Down
2 changes: 1 addition & 1 deletion Source/ExcelDna.SourceGenerator.NativeAOT/Generator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ namespace ExcelDna.SourceGenerator.NativeAOT
{
public unsafe class AddInInitialize
{
[UnmanagedCallersOnly(EntryPoint = "Initialize", CallConvs = new[] { typeof(CallConvCdecl) })]
[UnmanagedCallersOnly(EntryPoint = "Initialize", CallConvs = new[] { typeof(CallConvStdcall) })]
[System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage("Trimming", "IL3050:RequiresDynamicCode", Justification = "SourceGenerator preserves types and methods")]
public static short Initialize(void* xlAddInExportInfoAddress, void* hModuleXll, void* pPathXLL, byte disableAssemblyContextUnload, void* pTempDirPath)
{
Expand Down
17 changes: 14 additions & 3 deletions Source/ExcelDna.TestAOT/ExcelDna.TestAOT.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,25 @@

<AllowUnsafeBlocks>true</AllowUnsafeBlocks>

<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<PublishAOT>true</PublishAOT>
<SelfContained>true</SelfContained>
<TargetName>ExcelDna.TestAOT64</TargetName>

<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>

<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>

<Platforms>x86;x64</Platforms>
</PropertyGroup>

<PropertyGroup Condition="'$(Platform)' == 'x64'">
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<TargetName>ExcelDna.TestAOT64</TargetName>
</PropertyGroup>

<PropertyGroup Condition="'$(Platform)' == 'x86' Or '$(Platform)' == 'Win32'">
<RuntimeIdentifier>win-x86</RuntimeIdentifier>
<TargetName>ExcelDna.TestAOT</TargetName>
</PropertyGroup>

<Target Name="SetNoBuild">
Expand All @@ -40,7 +50,8 @@
</ItemGroup>

<Target Name="PostBuildAOT" AfterTargets="PublishAfterBuild">
<Exec Command="xcopy /y &quot;$(SolutionDir)ExcelDna.Host.NativeAOT\bin\$(ConfigurationName)\x64\ExcelDna.Host.NativeAOT.x64.xll&quot; &quot;$(TargetDir)publish\ExcelDna.TestAOT64.xll*&quot;&#xD;&#xA;" />
<Exec Condition="'$(Platform)' == 'x64'" Command="xcopy /y &quot;$(SolutionDir)ExcelDna.Host.NativeAOT\bin\$(ConfigurationName)\x64\ExcelDna.Host.NativeAOT.x64.xll&quot; &quot;$(TargetDir)publish\ExcelDna.TestAOT64.xll*&quot;" />
<Exec Condition="'$(Platform)' == 'x86' Or '$(Platform)' == 'Win32'" Command="xcopy /y &quot;$(SolutionDir)ExcelDna.Host.NativeAOT\bin\$(ConfigurationName)\x86\ExcelDna.Host.NativeAOT.x86.xll&quot; &quot;$(TargetDir)publish\ExcelDna.TestAOT.xll*&quot;" />
</Target>

</Project>
Loading