C 无法使用dyn在R中加载。请加载使用Visual Studio编译的dll

C 无法使用dyn在R中加载。请加载使用Visual Studio编译的dll,c,r,visual-studio-2012,dll,C,R,Visual Studio 2012,Dll,我无法加载在Win XP sp3或Win7中使用Visual Studio编译的DLL。我在path环境中设置了当前目录。当我尝试加载它时,会收到错误消息: " inDL中的错误(x,as.logical(本地),as.logical(现在),…): 无法加载共享对象“C:/Documents and Settings//[…]///sampleDLL.dll”: LoadLibrary失败:找不到指定的模块。 " 很明显,dll在那里,错误是指缺少了其他东西 我可以从C调用dll。下面我附上一

我无法加载在Win XP sp3或Win7中使用Visual Studio编译的DLL。我在path环境中设置了当前目录。当我尝试加载它时,会收到错误消息:

" inDL中的错误(x,as.logical(本地),as.logical(现在),…): 无法加载共享对象“C:/Documents and Settings//[…]///sampleDLL.dll”: LoadLibrary失败:找不到指定的模块。 "

很明显,dll在那里,错误是指缺少了其他东西

我可以从C调用dll。下面我附上一个无法在R中加载的dll的小示例。 我的想法快用完了。有人能帮忙吗

文件sampleDLL.c

#include <windows.h>
#include <stdio.h>
#include "SampleDLL.h"

double PowerOf2 (double UserNumber)
{
    printf("Complete the Power of 2");
    return UserNumber * UserNumber;
}

double PowerOf3 (double UserNumber)
{
    printf("Complete the Power of 3");
    return UserNumber * UserNumber * UserNumber;
}

double CircleArea (double UserRadius)
{
    printf("Complete the CircleArea");
    return UserRadius * UserRadius * PI;
}

double CircleCircum (double UserRadius)
{
    printf("Complete the CircleCircum");
    return 2 * UserRadius * PI;
}

void MyFunc(char ** strInput)
{
    printf("Complete the MyFunc");
    MessageBox(0, L"Hi Viet from C", L"C Program", 0);
}

end sampleDLL.h

为什么您希望这样做有效?他说:“本附录包含了许多规定性意见。这些意见是痛苦经历的结果。除非您遵循了所有规定,否则请不要向R邮件列表报告问题。”。因此,我的第一个想法是:浏览一下手册(至少是目录)。此外,使用的是unix风格的文件分隔符
/
,而不是Windows风格的文件分隔符``;也许这是相关的。路径中的空格也会导致问题。但真的,你们应该听从@JoshuaUlrich的建议。谢谢你们!实际上,如果我理解得很好的话,这些文档指的是通过R编译C代码。我想做的就是独立编译一个dll,然后从R调用它。我可以用FORTRAN来做,我想我应该可以用C来做?
#ifdef SAMPLEDLL_EXPORTS
#define SAMPLEDLL_API __declspec(dllexport) 
#else
#define SAMPLEDLL_API __declspec(dllimport) 
#endif

#define PI 3.1415

SAMPLEDLL_API double  PowerOf2 (double UserNumber);
SAMPLEDLL_API double  PowerOf3 (double UserNumber);
SAMPLEDLL_API double  CircleArea (double UserRadius);
SAMPLEDLL_API double  CircleCircum (double UserRadius);
SAMPLEDLL_API void  MyFunc(char ** strInput);