Problema con dll

venerdì 23 luglio 2010 - 11.24
Tag Elenco Tags  C#  |  VB.NET

bryger Profilo | Newbie

Ciao a tutti,
ho un progetto scritto con VS2008 per smart device, windows mobile 6.1, da questo progetto devo chiamare una funzione contenuta in una dll che ho scritto in Visual c++ sempre da vs2008 sempre di tipo smart device : questo il codice dentro la dll :

// prova.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"


BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}

extern "C" __declspec(dllexport) int Somma(int val1, int val2)
{
return (val1 + val2);
}

ovviamente dall'applaicazione vb devo chiamare a funzione somma :

nel programma VB ho dichiarato la funzione, dopo aver incluso la dll nel progetto così :


Declare Function somma Lib "Prova.dll" (ByVal val1 As Integer, ByVal val2 As Integer) As Integer

quando richiamo la funzione somma all'interno del progetto così :

Dim x As Integer

x = somma(3, 4)

MsgBox(x)

viene generato l'errore :

Can't find an Entry Point 'somma' in a PInvoke DLL 'Prova.dll'.

Usando il dumpbin sembra che la dll sia fatta bene perchè la funzione somma risulta esposta verso l'esterno, quindi quale può essere il problema? forse la dichiarazione nel progetto VB?

Grazie

kataklisma Profilo | Senior Member

>Ciao a tutti,

Ciao!

>ho un progetto scritto con VS2008 per smart device, windows mobile
>6.1, da questo progetto devo chiamare una funzione contenuta
>in una dll che ho scritto in Visual c++ sempre da vs2008 sempre
>di tipo smart device : questo il codice dentro la dll :
>...
>...
>Declare Function somma Lib "Prova.dll" (ByVal val1 As Integer,
>ByVal val2 As Integer) As Integer
>...
>...

La cosa è piu stupida di quanto tu possa credere....se hai dichiarato la funzione "Somma", perchè nel listato vb.net la dichiari "somma"?

:)

>Grazie

Di nulla ;)

------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

bryger Profilo | Newbie

Perchè sono intelligente! comunque ho già provato a fare questa modifica, me ne sono accorto dopo aver messo il messaggio qui ma non funziona uguale, inoltre ho provato a dichiarare la funzione in VB come _Somma e non funziona uguale....

cioè ho scritto sia così:

Declare Function Somma Lib "Prova.dll" (ByVal val1 As Integer, ByVal val2 As Integer) As Integer

sia così :

Declare Function _Somma Lib "Prova.dll" (ByVal val1 As Integer, ByVal val2 As Integer) As Integer

and now?????

Grazie

kataklisma Profilo | Senior Member

>Perchè sono intelligente! comunque ho già provato a fare
>questa modifica, me ne sono accorto dopo aver messo il messaggio
>qui ma non funziona uguale, inoltre ho provato a dichiarare la
>funzione in VB come _Somma e non funziona uguale....
>
>cioè ho scritto sia così:
>
>Declare Function Somma Lib "Prova.dll" (ByVal val1 As Integer,
>ByVal val2 As Integer) As Integer
>
>sia così :
>
>Declare Function _Somma Lib "Prova.dll" (ByVal val1 As Integer,
>ByVal val2 As Integer) As Integer
>
>and now?????

L'errore rimane lo stesso?Hai copiato la dll "Prova" nella directory del programma?

Le cause potrebbero essere molteplici, prova con DllImport (Anche se è un'equivalente di Declare):

<DllImport("Prova.Dll")> Public Shared Function Somma(ByVal val1 As Integer,ByVal val2 As Integer) As Integer

Fammi sapere...

>Grazie
Di nulla!
------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

bryger Profilo | Newbie

Ciao,
il problema era la maiuscola, avevo cambiato la dichiarazione ma probabilmente avevo fatto casino con la DLL inserita nel progetto ed inviata al palmare, era rimasta quella vecchia; ho rifatto il tutto da zero e ora funziona!!!!

Scusa il disturbo......

kataklisma Profilo | Senior Member

>Ciao,
>il problema era la maiuscola, avevo cambiato la dichiarazione
>ma probabilmente avevo fatto casino con la DLL inserita nel progetto
>ed inviata al palmare, era rimasta quella vecchia; ho rifatto
>il tutto da zero e ora funziona!!!!

L'errore era chiaro, ma visto i tuoi riscontri non riuscivo a capire perchè non andava ! :D

>Scusa il disturbo......
Ci mancherebbe, l'importante è aver risolto!
------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5