今はNativeAOTを使用して、COMではないネイティブDLLも作成出来るようになりました。
https://kagasu.hatenablog.com/entry/2022/12/09/173354
UnmanagedCallersOnly属性を付与して関数をエクスポートすると、
-----
using System.Runtime.InteropServices;
namespace CsNativeDLL;
public class Exports
{
[UnmanagedCallersOnly(EntryPoint = "ShowMessage")]
public static void ShowMessage(IntPtr pMessage)
{
var msg = Marshal.PtrToStringUni(pMessage);
MessageBox.Show(msg);
}
}
-----
Excel側からはこのように呼び出せます。
-----
Private Declare PtrSafe Sub ShowMessage Lib "CsNativeDLL.dll" (ByVal pStr As LongPtr)
Private Sub CommandButton1_Click()
Call ShowMessage(StrPtr("あいうえお"))
End Sub
-----