在VB.NET中实现D3DCompileFromFile给了我一个;使堆栈不平衡。”;错误

在VB.NET中实现D3DCompileFromFile给了我一个;使堆栈不平衡。”;错误,vb.net,dllimport,pixel-shader,Vb.net,Dllimport,Pixel Shader,我已经从Shazzam着色器编辑器()中获取了部分代码,并修改了代码以使用compilefrom文件而不是内存 () 编译器似乎正在运行,但现在我收到错误消息: X3506无法识别的编译器目标“p” 它似乎只是读取字符串中的第一个字符?那么,我做错了什么?让它工作起来,我做了两件事: 首先,我将其全部移动到一个模块中: Module Extend <Guid("8BA5FB08-5195-40e2-AC58-0D989C3A0102"), InterfaceType(ComInte

我已经从Shazzam着色器编辑器()中获取了部分代码,并修改了代码以使用compilefrom文件而不是内存 ()

编译器似乎正在运行,但现在我收到错误消息:

X3506无法识别的编译器目标“p”


它似乎只是读取字符串中的第一个字符?那么,我做错了什么?

让它工作起来,我做了两件事:

首先,我将其全部移动到一个模块中:

Module Extend
    <Guid("8BA5FB08-5195-40e2-AC58-0D989C3A0102"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)> _
    Public Interface ID3DBlob
        <PreserveSig> _
        Function GetBufferPointer() As IntPtr
        <PreserveSig> _
        Function GetBufferSize() As Integer
    End Interface

    <PreserveSig> _
    <DllImport("d3dcompiler_47.dll", CharSet:=CharSet.Auto)> _
    Public Function D3DCompileFromFile(<MarshalAs(UnmanagedType.LPTStr)> pFilename As String,
                                                          pDefines As IntPtr,
                                                          pInclude As IntPtr,
                                                          <MarshalAs(UnmanagedType.LPStr)> pEntrypoint As String,
                                                          <MarshalAs(UnmanagedType.LPStr)> pTarget As String,
                                                          flags1 As Integer,
                                                          flags2 As Integer,
                                                          ByRef ppCode As ID3DBlob,
                                                          ByRef ppErrorMsgs As ID3DBlob) As Integer
    End Function
End Module
模块扩展
_
公共接口ID3DBlob
_
函数GetBufferPointer()作为IntPtr
_
函数GetBufferSize()为整数
端接口
_
_
公共函数D3DCompileFromFile(pFilename为字符串,
PDE定义为IntPtr,
pInclude作为IntPtr,
pEntrypoint作为字符串,
pTarget作为字符串,
将1标记为整数,
将2标记为整数,
ByRef ppCode作为ID3DBlob,
ByRef ppErrorMsgs As ID3DBlob)As Integer
端函数
端模块
第二,我更改了:

<MarshalAs(UnmanagedType.LPTStr)>


似乎我有点沮丧,改变了一些行之有效的事情:S

Module Extend
    <Guid("8BA5FB08-5195-40e2-AC58-0D989C3A0102"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)> _
    Public Interface ID3DBlob
        <PreserveSig> _
        Function GetBufferPointer() As IntPtr
        <PreserveSig> _
        Function GetBufferSize() As Integer
    End Interface

    <PreserveSig> _
    <DllImport("d3dcompiler_47.dll", CharSet:=CharSet.Auto)> _
    Public Function D3DCompileFromFile(<MarshalAs(UnmanagedType.LPTStr)> pFilename As String,
                                                          pDefines As IntPtr,
                                                          pInclude As IntPtr,
                                                          <MarshalAs(UnmanagedType.LPStr)> pEntrypoint As String,
                                                          <MarshalAs(UnmanagedType.LPStr)> pTarget As String,
                                                          flags1 As Integer,
                                                          flags2 As Integer,
                                                          ByRef ppCode As ID3DBlob,
                                                          ByRef ppErrorMsgs As ID3DBlob) As Integer
    End Function
End Module
<MarshalAs(UnmanagedType.LPTStr)>
<MarshalAs(UnmanagedType.LPStr)>