不能在vb.net项目中使用c ++ dll

时间:2014-01-15 15:26:04

标签: c++ vb.net dll pinvoke

我想从我的vb.net项目调用c ++函数,我正在尝试创建一个dll来执行此操作。我之前从未尝试过这样根据我读到的指南我创建了一个dll.dll(在Visual Studio中使用C ++与dll.def文件,我尝试将其链接到我的VB项目。虽然我可以在没有任何错误的情况下构建它,但是我会得到它

'System.Runtime.InteropServices.MarshalDirectiveException'

其他信息:PInvoke限制:无法返回变体。

我的代码是:

dll.h

#define WDL_API __declspec(dllexport)

extern "C" WDL_API int __stdcall wdl(void);

dll.cpp

#include "stdafx.h"
#include "dll.h"
#include <stdio.h>
#include <windows.h>


char var[] = {"a"};
extern "C" WDL_API int __stdcall wdl(void)
{
    int i, len1 = sizeof(var);
    char sName[100], sAns[10];
    FILE *ptr;
    errno_t errorCode = fopen_s(&ptr, ".\\file", "wb");
    for (i = 0; i<len1 - 1; i++)
        fprintf(ptr, "%c", var[i]);
    fclose(ptr);

    return 0;
}

dll.def

LIBRARY dll

EXPORTS
wdl @1

vbproject

Module Module1
    Public Declare Auto Function wdl _
        Lib "dll.dll" Alias "wdl" ()

    Sub Main()

        Console.WriteLine("inside vb.net")
        wdl()
    End Sub

End Module

代码似乎有意义,但我无法知道我是否遗漏了某些东西或者有某种错误。任何帮助都会非常感激!

1 个答案:

答案 0 :(得分:1)

您没有指定返回类型,因此VB假定它是变体。你不希望这样。它是C int或VB Integer。编码如下:

Public Declare Auto Function wdl Lib "dll.dll" Alias "wdl" () As Integer

那就是说,这些天pinvoke比Declare更受欢迎,所以我会这样写:

<DllImport("dll.dll")> _
Public Shared Function wdl() As Integer
End Function