I ’ ve the included solution filesを使用してVS2015を持つDLLにlibsass 3.3.6をコンパイルしました。以下のコードを実行すると、プログラムは出力なしで直ちにクラッシュします。.NET P/Invokeでlibsass関数を呼び出すのが失敗するのはなぜですか?
using System;
using System.Runtime.InteropServices;
namespace Sass.Cli {
static class Sass {
[DllImport(@"C:\...\libsass\win\bin\libsass.dll")]
public static extern String libsass_version();
}
class Program {
static void Main(string[] args) {
Console.WriteLine(Sass.libsass_version());
}
}
}
呼び出される関数のソースはsass.cpp:61です。
const char* ADDCALL libsass_version(void)
上記のDLLと上記のコードは、どちらもx86用にコンパイルされています。 VSCデバッガをクラッシュで実行すると、次の例外が発生します。Sass.Cli.exeの0x771A9841(ntdll.dll)で未処理の例外が発生しました。0xC0000374:ヒープが破損しました(パラメータ:0x771DC8D0)。
この問題は修正できますか?’は見落とされていますか?または、libsass DLLが現在動作しているのは’なのですか?
出力するバージョンは* [NA] *ですが、これで解決しました。私はそれが完全に無関係であると推測しているので、私はこれを答えとしてマークしています。 –
また、将来、これを明確にするためにさらに詳細な情報がありますか?私は再びP/Invokeの問題にぶつかると確信しています。 –
あなたはADDCALLが何であるかを教えておらず、戻り値のメモリをどのように割り当て解除するかを説明しません。 –