これはなに?
Azure Functions 上で PInvok 経由で呼び出されたアンマネージドコードが動作するかを確認しました。
環境
- Windows 10
- Visual Studio Community 2017
参考
プロジェクト作成
Visual Studio の [ツール] メニューの [拡張機能と更新プログラム]から「Azure Functions」を検索して「Azure Functions と Web ジョブ ツール」をダウンロードします。自分は英語版を使っているので英語ですが ...
次に新しいプロジェクトを作成します。メニューの「ファイル」から新しいプロジェクト作成を選び、Azure Functions を選び、Azure Functions のプロジェクトを作ります。
トリガーはとりあえず http trigger を選択。
コード
mymath.dll には half という引数を半分にするだけの dll があります。これがアンマネージドコードで、マネージドコードの C# から Azure Functions 上で動作するかを確認します。
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using System.Runtime.InteropServices;
namespace AzureFuncMyMath
{
public static class Function1
{
[FunctionName("Function1")]
public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log)
{
int ret = half(10);
return req.CreateResponse(HttpStatusCode.OK, "Ans: " + $"{ret}") ;
}
[DllImport("nymath.dll", CallingConvention = CallingConvention.StdCall)]
static extern int half(int n);
}
}
コンパイルしてとりえずローカルのシミュレータ上で動作確認します。
とりえず動きそうです。