Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Ruby无法加载DLL_C_Ruby - Fatal编程技术网

C Ruby无法加载DLL

C Ruby无法加载DLL,c,ruby,C,Ruby,我在Windows上使用Ruby 1.8.6。我正在用C扩展Ruby,也就是说我想在Ruby中加载一个DLL。但是Ruby无法加载我的Dll。我使用Visual Studio.net命令提示符并将我的DLL(即prov.DLL)集成到一个C程序pro1.C中。之后,我通过Ruby调用这些C函数 D:\ruby_extend\pronmake>irb irb(main):001:0> require 'pro1' => true irb(main):002:0> inclu

我在Windows上使用Ruby 1.8.6。我正在用C扩展Ruby,也就是说我想在Ruby中加载一个DLL。但是Ruby无法加载我的Dll。我使用Visual Studio.net命令提示符并将我的DLL(即prov.DLL)集成到一个C程序pro1.C中。之后,我通过Ruby调用这些C函数

D:\ruby_extend\pronmake>irb
irb(main):001:0> require 'pro1'
=> true
irb(main):002:0> include Pro
=> Object
irb(main):003:0> Pro::load
=> false
irb(main):004:0> 
我只得到一个错误:

DLL fails to load through ruby...
我怎样才能得到stacktrace?任何建议都会帮助我

下面是我的pro1.c代码:

#include "windows.h"
#include "ruby.h"
#include "pro.h"
#define _D(string) {OutputDebugString(string);}
VALUE Pro;
HINSTANCE hlibrary;

void _textline(const char *s, int len)
//************************************
{
    _D(s);
}

static VALUE p_load(VALUE self )
//******************************
{
       return pro_load();
}

static VALUE p_init(VALUE self)
//*****************************
{
    _D("-> init");
         pro_set_textline_callback(_textline);
    pro_renderInit();
}

static VALUE p_parse(VALUE self, VALUE string_to_parse)
//*****************************************************
{
    _D(StringValuePtr(string_to_parse));
    return pro_parse(StringValuePtr(string_to_parse));
}

void proeventcallback(proRenderEventType type, proRenderEventData data)
//************************************************************************
{
    switch(type){
        case proRenderEventDone:
            _D("-> cleanup");
            pro_renderCleanUp();
            //if (vWindow)
            //{
            //  SendMessage((HWND)NUM2INT(vWindow), WM_USER+2, 0, 0);
            //}
    }
}

static VALUE pro_render( VALUE self )
//**********************************
{
    _D("-> render");
    pro_set_renderevent_callback(proeventcallback);
    SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_ABOVE_NORMAL);
    pro_render(PRO_RENDERASYNC);
    return Qtrue;
}

void Init_pro1()
//***************
{
    pro = rb_define_module( "Pro" );
    rb_define_method(Pro, "load", p_load, 0);
    rb_define_method( Pro, "init_engine", p_init, 0 );
    rb_define_method(Pro, "parse", p_parse, 1);
    rb_define_method(Pro, "render", pr_render, 0);   
}

我将研究pro_load的定义,因为这似乎是决定ruby代码中pro::load返回值的因素